package com.demo;
import com.google.common.collect.Lists;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.Callable;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @Filename: StringTest
* @Author: Zhang Wei
* @Date: 2018/12/27 14:29
* @Description:
* @History:
*/
public class StringTest {
// @Autowired
// private ThreadPoolExecutor threadPoolExecutor;
public static String BASEINFO = "Mr.Y";
public static int COUNT = 2000000;
public static void main(String[] args) throws Exception {
doStringTest();
doStringBufferTest();
doStringBuilderTest();
//线程并发测试
// ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3,
// 10,
// 1,
// TimeUnit.SECONDS,
// new ArrayBlockingQueue<>(
// 1));
// List<Callable<Void>> tasklist = Lists.newArrayList();
// tasklist.add(() -> {
// doStringTest();
// return null;
// });
// tasklist.add(() -> {
// doStringTest();
// return null;
// });
// threadPoolExecutor.invokeAll(tasklist);
List<String> list = Lists.newArrayList();
list.add(" I ");
list.add(" like ");
list.add(" BeiJing ");
list.add(" tian ");
list.add(" an ");
list.add(" men ");
list.add(" . ");
doStringBufferListTest(list);
doStringBuilderListTest(list);
}
/**
* 执行一项String赋值测试
*/
public static void doStringTest() {
String str = new String(BASEINFO);
long starttime = System.currentTimeMillis();
//拥有线程并发测试
// for (int i = 0; i < COUNT; i = 0) {
// str = str + "miss";
// COUNT--;
// }
for (int i = 0; i < COUNT / 100; i++) {
str = str + "miss";
}
long endtime = System.currentTimeMillis();
System.out.println((endtime - starttime)
+ " millis has costed when used String.");
}
/**
* 执行一项StringBuffer赋值测试
*/
public static void doStringBufferTest() {
StringBuffer sb = new StringBuffer(BASEINFO);
long starttime = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
sb = sb.append("miss");
}
long endtime = System.currentTimeMillis();
System.out.println((endtime - starttime)
+ " millis has costed when used StringBuffer.");
}
/**
* 执行一项StringBuilder赋值测试
*/
public static void doStringBuilderTest() {
StringBuilder sb = new StringBuilder(BASEINFO);
long starttime = System.currentTimeMillis();
for (int i = 0; i < COUNT; i++) {
sb = sb.append("miss");
}
long endtime = System.currentTimeMillis();
System.out.println((endtime - starttime)
+ " millis has costed when used StringBuilder.");
}
/**
* 测试StringBuffer遍历赋值结果
*
* @param mlist
*/
public static void doStringBufferListTest(List<String> mlist) {
StringBuffer sb = new StringBuffer();
long starttime = System.currentTimeMillis();
for (String string : mlist) {
sb.append(string);
}
long endtime = System.currentTimeMillis();
System.out.println(sb.toString() + "buffer cost:"
+ (endtime - starttime) + " millis");
}
/**
* 测试StringBuilder迭代赋值结果
*
* @param mlist
*/
public static void doStringBuilderListTest(List<String> mlist) {
StringBuilder sb = new StringBuilder();
long starttime = System.currentTimeMillis();
for (Iterator<String> iterator = mlist.iterator(); iterator.hasNext(); ) {
sb.append(iterator.next());
}
long endtime = System.currentTimeMillis();
System.out.println(sb.toString() + "builder cost:"
+ (endtime - starttime) + " millis");
}
}
String、StringBuffer、StringBuilder赋值速度测试及线程并发String赋值测试
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- String 字符串常量 StringBuffer 字符串变量(线程安全) StringBuilder 字符串变量...
- 问题1. String的了解问题2. String 为什么要设计成不可变的? String 与 StringBui...
- 一、String String由于是不可变类,所以线程安全。 二、StringBuffer以及StringBuil...
- 运行速度 StringBuilder > StringBuffer > String String最慢的原因:St...
- String:字符串常量,底层实现由final char[] 存储字符串,由于被final修饰,每次增删操作都需要...