访问字符串内字符的几种方法的性能测试

synhy 2006-05-22 10:31:27
尝想做个处理文本的程序,考虑性能,对想到的访问字符串内单个字符的性能做个测试,简单写了个程序打印耗时,也好有个量的概念。代码如下:
public class test{
public test(){
}

public static void main(String argv[])
{
String test="..."; //很长的测试字符串
StringBuffer test1=new StringBuffer(test);
int i,j,ilen = test.length(),times=100000; //每种方式测试次数
char ch;
byte chset[];
long t1=0,t2=0;
System.out.println("test string length:" + String.valueOf(ilen) + "Bytes"); //打印测试字符串长度

t1 = System.currentTimeMillis();
for(j=0;j<times;j++){
for(i=0;i<ilen;i++){
ch = test.charAt(i);
}
i=0;
}

t2 = System.currentTimeMillis();
System.out.println("test1 over:" + String.valueOf(t2-t1) + "ms");
chset = test.getBytes();
t2 = System.currentTimeMillis();

for(j=0;j<times;j++){
for(i=0;i<ilen;i++){
ch = (char)chset[i];
}
i=0;
}

t1 = System.currentTimeMillis();
System.out.println("test2 over:" + String.valueOf(t1-t2) + "ms");
ilen = test1.length();
t1 = System.currentTimeMillis();

for(j=0;j<times;j++){
for(i=0;i<ilen;i++){
ch = test1.charAt(i);
}
i=0;
}
t2 = System.currentTimeMillis();
System.out.println("test3 over:" + String.valueOf(t2-t1) + "ms");
}
}
运行结果如下:
D:\Program\J2SE>java test
test string length:7708Bytes
test1 over:3657ms
test2 over:2156ms
test3 over:15750ms

D:\Program\J2SE>java test
test string length:7708Bytes
test1 over:3671ms
test2 over:2156ms
test3 over:15688ms

D:\Program\J2SE>java test
test string length:7708Bytes
test1 over:3672ms
test2 over:2172ms
test3 over:15141ms

简要分析:
方式1:直接用String.charAt(i) 访问,可能是多了一个函数调用,增加了耗时,里面应该也是数组的形式访问的;
方式2:先将String转成数组,速度较快,每次耗时大概是方式1的60%。
方式3:使用StringBuffer.charAt(i)访问,速度慢的太多了。Buffer的方式应该是适合字符串的添加删除操作,用来访问字符,速度太慢。

后记:
暂时只想到了这么几种方式。
想既然数据都出来了,就发上来供大家看看。各种方式为何时间差别较大,有谁知道的也望告知一下。
...全文
58 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧