在实际使用中我们经常要用到字符串的拼接,但是拼接时我们又需要考虑什么样的拼接方式才是最有效率的,下面我们进行验证一下:
代码如下,分别设置相同的变量进行连接,使用数字作为连接的介质,让连接的次数和内容相同,
总结:
用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。
Join和StringBuffer居中,StringBuffered方法较差
StringBuilder 的速度最快,但其有线程安全的问题,而且存在版本限制问题,一般情况下最好使用StringBuffer。
代码如下,分别设置相同的变量进行连接,使用数字作为连接的介质,让连接的次数和内容相同,
public static long currentTimeMillis()
该方法的作用是返回当前的计算机时间,时间的表达格式为当前计算机时间和GMT时间(格林威治时间)1970年1月1号0时0分0秒所差的毫秒数。
在下面代码中,: package sample;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.StringUtils;
public class StringTest
{
public static void main(String [] args)
{//mian方法
System.out.println("开始计算:");
long plus=stringPlus();
long stringBuffer=stringStringBuffer();
long stringBuilder=stringStringBuilder();
long stringConcat=stringConcat();
long stringJoin=stringJoin();
System.out.println("plus:"+plus);
System.out.println("stringConcat:"+stringConcat);
System.out.println("stringJoin:"+stringJoin);
System.out.println("stringBuffer:"+stringBuffer);
System.out.println("stringBuilder:"+stringBuilder);
}
public static long stringPlus()
{
String str="";
long ts=System.currentTimeMillis();
//-----------------------------
for(int i=1;i<=10000;i++)
{
str+=i;
}
//-------------------------------
long te=System.currentTimeMillis();
long d=(te-ts);
return d;
}
public static long stringJoin()
{
List<String> list = new ArrayList<String>();
long ts = System.currentTimeMillis();
//------------------------------------
for(int i=1;i<=10000;i++)
{
list.add(String.valueOf(i));
}
//-----------------------------------
StringUtils.join(list.iterator(),"");
long te=System.currentTimeMillis();
long d=(te-ts);
return d;
}
public static long stringStringBuffer()
{
StringBuffer sb=new StringBuffer();
sb.append("");
long ts=System.currentTimeMillis();
//-----------------------------
for(int i=1;i<=10000;i++)
{
sb.append(i);
}
//-------------------------------
long te=System.currentTimeMillis();
long d=(te-ts);
return d;
}
public static long stringStringBuilder()
{
StringBuilder sb=new StringBuilder();
sb.append("");
long ts=System.currentTimeMillis();
//-----------------------------
for(int i=1;i<=10000;i++)
{
sb.append(i);
}
//-------------------------------
long te=System.currentTimeMillis();
long d=(te-ts);
return d;
}
public static long stringConcat()
{
String s = "";
long ts = System.currentTimeMillis();
//--------------------------------------------------------
for (int i = 1; i < 10000; i++) {
s = s.concat(String.valueOf(i));
}
//----------------------------------------------------------
long te=System.currentTimeMillis();
long d=(te-ts);
return d;
}
}
程序运行之后,我们能够看到如下结果:
运行1
进行了第二次和第三次运行次运行,其结果分别如下:
---------
总结:
用+的方式效率最差,concat由于是内部机制实现,比+的方式好了不少。
Join和StringBuffer居中,StringBuffered方法较差
StringBuilder 的速度最快,但其有线程安全的问题,而且存在版本限制问题,一般情况下最好使用StringBuffer。