1.下面简单的几行程序:
String c="ccc";
for (int i = 0; i < times; i++) {
c+="ccc";
}
请问分别当times=10000和times=50000的时候,后者的执行时间刚好是前者的5倍左右,还是小于5倍或远大于5倍?简述原因
如果你的答案不是整好5倍,请改造以上程序,要求实现同样的字符串加和功能,但是执行的时间与times大小之比需呈线性关系,而不是指数关系
String c="ccc";
for (int i = 0; i < times; i++) {
c+="ccc";
}
请问分别当times=10000和times=50000的时候,后者的执行时间刚好是前者的5倍左右,还是小于5倍或远大于5倍?简述原因
如果你的答案不是整好5倍,请改造以上程序,要求实现同样的字符串加和功能,但是执行的时间与times大小之比需呈线性关系,而不是指数关系
1 远大于5倍
2 用StringBuffer之类的代替String
StringBuffer sb= new StringBuffer();
for (int i = 0; i < 5000; i++)
{
sb.append(c);
}
这是我自己刚改的
大量字符串拼接用Stringbuffer,可以达到你的性能要求
我把次数放大了20倍才看得出来
import java.util.Date;public class Test {
public static void main(String[] args) {
int times = 200000;
long l1=new Date().getTime();
StringBuffer c = new StringBuffer("ccc");
for (int i = 0; i < times; i++) {
c.append("ccc");
}
long l2=new Date().getTime();
System.out.println(l2-l1);
times=1000000;
for (int i = 0; i < times; i++) {
c.append("ccc");
}
long l3=new Date().getTime();
System.out.println(l3-l2);
}
}结果是
31
156
String 用的是字符串对象池,每次要重新构造,不能重新利用,所以效率很低很低很低........
for (int i = 0; c.length < times; i++) {
c+=c;
}这样来怎么样,c也指数级的增加,最后再调整一下.
for (int i = 0; c.length() < times; i++) {
c+=c;
} 这样来怎么样,c也指数级的增加,最后再调整一下.
public class abc{
public static void main(String[] args){
String a = "abc";
String b = "ab";
String c = b+"c";
System.out.println(a==c);
}
}
楼主可以看一下这个程序,它的结果是false,而不是true.
它可以很好的说明你的哪个程序是的时间倍数大于5,
times=50000;用时1248791301233 两个用时几乎相同,之后改成StringBuffer以后才有5倍的差距为什么这样?????????????????????
(1)由于要不停的在字符池里构造新的对象,所以远远大于5倍
(2)改成StringBuffer以后,相差几乎5倍