• java的String与StringBuffer


    一直听说StringBuffer的性能比String高很多,正好这本书的第一章就是关于这个例子的,所以小小的试验了下。

    PS:循环的次数比书中的多,2000年的电脑配置1W次循环就很明显,但是现在不够啦。

      结果是40922ms与0ms的差距

     public void String2StringBuffer(){		 
    	   	String str = "tr";
    	   	long start1 = System.currentTimeMillis();
    	   	System.out.println(start1);
    	   	for(int i = 0 ;i<80000; i++)
    	   		str = str + "-tr";
    	   	System.out.println(System.currentTimeMillis());
    	   	System.out.println(System.currentTimeMillis() - start1);
    	   	
    	    StringBuffer sb = new StringBuffer("sb");
    	   
    	   	long start2 = System.currentTimeMillis();
    	   	System.out.println(start2);
    	   	for(int j = 0 ; j< 80000 ;j++)
    	   		sb.append("-sb");
    	   	System.out.println(System.currentTimeMillis());
    	   	System.out.println(System.currentTimeMillis() - start2);
    
    	  /* 	System.out.println();
    	   		1352090136281
    			1352090177203
    			40922
    			1352090177203
    			1352090177203
    			0              */
       }
    

    String相加也有不同的方法,在试试:

      又是0ms与15ms的区别,虽然不知道为什么,待分析。

    public void String2String(){
    	   String str1,str2;
    	   long start1 = System.currentTimeMillis();
    	   for(int i=0;i<=10000;i++)
    		    str1 = "hello"+"world"+"ufida";
    	   System.out.println(System.currentTimeMillis()-start1);
    	   
    	   long start2 = System.currentTimeMillis();
    	   for(int i =0;i<=10000;i++){
    		   str2 = "hello";
    		   str2+="world";
    		   str2+="ufida";
    	   }
    	   System.out.println(System.currentTimeMillis()-start2);
    	   
    	   /*System.out.println();
    	   		0
    			15              */
       }
    

    都说StringBuffer初始化大小比不初始化大小快,因为默认是16,如果超出会重新初始化,然后复制销毁。

    View Code
       public StringBuffer() {
        super(16);
        }
    
        public StringBuffer(String str) {
        super(str.length() + 16);
        append(str);
        }

    结果:的确是快了15ms,但是循环了100W次,所以这个性能提升不是很大。

     public void StringBuffer2StringBuffer(){
    	   StringBuffer sb1 = new StringBuffer();
    	   long start1 = System.currentTimeMillis();
    	   for(int i = 0;i<=1000000;i++)
    		   sb1.append("sb1");
    	   System.out.println(System.currentTimeMillis()-start1);
    	   
    	   StringBuffer sb2 = new StringBuffer(3000001);
    	   long start2 = System.currentTimeMillis();
    	   for(int i = 0;i<=1000000;i++)
    		   sb2.append("sb2");
    	   System.out.println(System.currentTimeMillis()-start2);
    	   /*System.out.println();
    	   		78
    			63              */
       }
    
  • 相关阅读:
    SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第二天任务攻略
    POJ 2263 Heavy Cargo(ZOJ 1952)
    EEPlat 主子表和对象引用配置实例
    tornado websocket
    android android:duplicateParentState=&quot;true&quot; &quot;false&quot;
    掌握4个有效的数据分析要点,切实解决用户痛点
    掌握4个有效的数据分析要点,切实解决用户痛点
    没有基础,如何成为数据分析师?
    没有基础,如何成为数据分析师?
    数据的无量纲化处理和标准化处理的区别是什么
  • 原文地址:https://www.cnblogs.com/wangchy0927/p/2755052.html
Copyright © 2020-2023  润新知