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]