wuzhenzhen0215 发表于 2013-1-29 09:33:49

Java 5种 字符串 拼接方式 性能 比较

package com.niit.test;/*** @(#)TestString.java*   */import java.util.*;      //首先System.currentTimeMillis()产生一个当前的毫秒,这个毫秒其实就是自1970年1月1日0时起的毫秒...Date()其实就是相当于Date(System.currentTimeMillis());.../** * Java 5种 字符串 拼接方式 性能 比较 */public class TestString {                /**      * Creates a new instance of <code>TestString</code>.      */      public TestString() {      }            /**      * @param args the command line arguments      */      public static void main(String[] args) {          // TODO code application logic here          Test();testConcat();testJoin() ;testStringBuffer();          testStringBuilder();      }            //String 测试使用 + 号 1      public static void   Test()      {          String s = "";               long ts = System.currentTimeMillis();               for (int i = 0; i < 10000; i++) {                   s = s + String.valueOf(i);               }               long te = System.currentTimeMillis();               System.out.println("时间差1:"+(te-ts));      }                      //String 测试使用Concat 2      publicstatic void testConcat() {               String s = "";               long ts = System.currentTimeMillis();               for (int i = 0; i < 10000; i++) {                   s = s.concat(String.valueOf(i));               }               long te = System.currentTimeMillis();            System.out.println("时间差2:"+(te-ts));                }                        //String 测试使用泛型 3         public staticvoid testJoin() {               List<String> list = new ArrayList<String>();               long ts = System.currentTimeMillis();               for (int i = 0; i < 10000; i++) {                   list.add(String.valueOf(i));               }               long te = System.currentTimeMillis();          System.out.println("时间差3:"+(te-ts));      }                         //String 测试使用 StringBuffer4      public staticvoid testStringBuffer() {               StringBuffer sb = new StringBuffer();               long ts = System.currentTimeMillis();               for (int i = 0; i < 10000; i++) {                   sb.append(String.valueOf(i));               }               sb.toString();               long te = System.currentTimeMillis();      System.out.println("时间差4:"+(te-ts));          }                     //String 测试使用 StringBuilder5       publicstaticvoid testStringBuilder() {               StringBuilder sb = new StringBuilder();               long ts = System.currentTimeMillis();               for (int i = 0; i < 100000; i++) {                   sb.append(String.valueOf(i));               }               sb.toString();               long te = System.currentTimeMillis();      System.out.println("时间差5:"+(te-ts));            }                                             //运行结果          /*                         时间差1:3016             时间差2:625             时间差3:0             时间差4:15             时间差5:47            100000                                       10000             时间差1:3016             时间差2:625             时间差3:0             时间差4:0             时间差5:0                                    */                  /*特别注意的是:                   StringBuilder 循环的次数是其它的10倍,         如果是一样,那么返回 0,可见StringBuilder 的速度之快。    总结:         用 + 的方式效率最差,concat由于是内部机制实现,比+的方式好些。          Join 和 StringBuffer,相差不大,Join方式要快些,         可见这种JavaScript中快速拼接字符串的方式在Java中也非常适用。          StringBuilder 的速度最快,但其有线程安全的问题,         而且只有JDK5 以上 支持。         */         }
页: [1]
查看完整版本: Java 5种 字符串 拼接方式 性能 比较