Java Date计算开始结束时间 使用Date对象计算出String和StringBuffer对象反复修改后的时间效率。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 设计2个基本相同的一系列修改操作程序块,一个用string来完成 一个用stringbuffer完成。用date在程序块开始前记录当前时间,结束后再记录当前时间,2个时间的差就是执行时间,比较下2个时间的耗时多少,哪个耗时少就比较有效率。 下面我简单写了一下比较的方法与测试,通过追加不同数量的A字符,去判断String跟StringBuffer所用时间大小,并且归集结果来比较public static void main(String[] args) { int minCount = 1000;//最小追加数量 int maxCount = 2000;//最大追加数量 List<Integer> equal = new ArrayList<Integer>(); //平等 List<Integer> str = new ArrayList<Integer>(); //String效率高 List<Integer> sb = new ArrayList<Integer>(); //StringBuffer效率高 String append = "A";//追加字符 int sum = 0; for (int i = minCount; i <= maxCount; i++) { if (calulateString(i, append) > calulateStringBuffer(i, append)) { sb.add(i); continue; } else if (calulateString(i, append) == calulateStringBuffer(i, append)) { equal.add(i); continue; } else if (calulateString(i, append) < calulateStringBuffer(i, append)) { str.add(i); continue; } else { //时间无法比较 System.out.println(calulateString(i, append) + "-" + calulateStringBuffer(i, append)); } } System.out.println(equal.size() + "相同效率:" + Collections.max(equal) + "--" + Collections.min(equal)); System.out.println(equal); if (str.size() > 0) { System.out.println(str.size() + "String效率高:" + Collections.max(str) + "--" + Collections.min(str)); System.out.println(str); } if (sb.size() > 0) { System.out.println(sb.size() + "StringBuffer效率高:" + Collections.max(sb) + "--" + Collections.min(sb)); System.out.println(sb); } System.out.println(sum); } /* * 计算string时间 */ public static long calulateString(int size, String append) { String str = new String(); long start = System.currentTimeMillis(); for (int i = 0; i < size; i++) { str += append; } return System.currentTimeMillis() - start; } /* * 计算string时间 */ public static long calulateStringBuffer(int size, String append) { StringBuffer str = new StringBuffer(); long start = System.currentTimeMillis(); for (int i = 0; i < size; i++) { str.append(append); } return System.currentTimeMillis() - start; }得出结果如下1-01-01-01-01-02-061相同效率:1826--1017[1017, 1019, 1021,。]8String效率高:1936--1323[1323, 1355, 1367, 1390, 1399, 1444, 1730, 1936]612StringBuffer效率高:2000--1000[1000, 1001, 1003,。]0可以看到,StringBuffer效率高的数量更多。 在使用String对象时,每追加一次,会重新生成一个对象,在循环达到一定数量时还会造成内存溢出,但是使用StringBuffer就不会出现内存溢出的问题,而且效率比较高。 怎么用jsoup将网页中的正文提取成txt文本 兼容问题 如何开发CA证书管理系统? 怎么让图片跟随鼠标移动? java 鼠标事件 按键的问题。 在java中如何把double类型转换为object类型 JAI的问题 【Java中IO流】OutputStreamWriter的用法 java 如何实现 程序终止? 求助~空指针异常问题 Java 8 中的stream分组函数能否带参数呢 对于一段字符串 "var p='xxxx'" 怎么在java里获得p的值
int minCount = 1000;//最小追加数量
int maxCount = 2000;//最大追加数量
List<Integer> equal = new ArrayList<Integer>(); //平等
List<Integer> str = new ArrayList<Integer>(); //String效率高
List<Integer> sb = new ArrayList<Integer>(); //StringBuffer效率高
String append = "A";//追加字符
int sum = 0;
for (int i = minCount; i <= maxCount; i++) {
if (calulateString(i, append) > calulateStringBuffer(i, append)) {
sb.add(i);
continue;
} else if (calulateString(i, append) == calulateStringBuffer(i, append)) {
equal.add(i);
continue;
} else if (calulateString(i, append) < calulateStringBuffer(i, append)) {
str.add(i);
continue;
} else {
//时间无法比较
System.out.println(calulateString(i, append) + "-" + calulateStringBuffer(i, append));
}
}
System.out.println(equal.size() + "相同效率:" + Collections.max(equal) + "--" + Collections.min(equal));
System.out.println(equal);
if (str.size() > 0) {
System.out.println(str.size() + "String效率高:" + Collections.max(str) + "--" + Collections.min(str));
System.out.println(str);
}
if (sb.size() > 0) {
System.out.println(sb.size() + "StringBuffer效率高:" + Collections.max(sb) + "--" + Collections.min(sb));
System.out.println(sb);
}
System.out.println(sum);
}
/*
* 计算string时间
*/
public static long calulateString(int size, String append) {
String str = new String();
long start = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
str += append;
}
return System.currentTimeMillis() - start;
}
/*
* 计算string时间
*/
public static long calulateStringBuffer(int size, String append) {
StringBuffer str = new StringBuffer();
long start = System.currentTimeMillis();
for (int i = 0; i < size; i++) {
str.append(append);
}
return System.currentTimeMillis() - start;
}得出结果如下
1-0
1-0
1-0
1-0
1-0
2-0
61相同效率:1826--1017
[1017, 1019, 1021,。]
8String效率高:1936--1323
[1323, 1355, 1367, 1390, 1399, 1444, 1730, 1936]
612StringBuffer效率高:2000--1000
[1000, 1001, 1003,。]
0可以看到,StringBuffer效率高的数量更多。