highcharts 大数据 String+,StringBuilder,String.format运行效率比较
实现String字符串相加的方法有很多,常见的有直接相加,StringBuilder.append和String.format,这三者的运行效率是有差异的,String是final类型的,每次相加都会new一个
新的String对象,如果这种操作很多的话,很占用很大的内存。而StringBuilder.append方法是在原对象上进行操作,如果长度不够就自行扩展。
测试代码1:
- <span style="white-space:pre"> </span>String success_code = "0";
- byte splite = 0x01;
- private void method1(){
- String resultMsg = "";
- long time1 = System.nanoTime();
- String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
- long time2 = System.nanoTime();
- System.out.println("StringFormat:"+(time2-time1)+"ns");
- long time3 = System.nanoTime();
- resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
- long time4 = System.nanoTime();
- System.out.println("String add:"+(time4-time3)+"ns");
- long time5 = System.nanoTime();
- sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite);
- long time6 = System.nanoTime();
- System.out.println("StringBuilder add:"+(time6-time5)+"ns");
- System.out.println("-------------------------------------------------");
- }
- @Test
- public void test1(){
- for(int i=0; i<1000; i++){
- method1();
- }
- }

<span style="white-space:pre"> </span>String success_code = "0"; byte splite = 0x01; private void method1(){
String resultMsg = "";
long time1 = System.nanoTime();
String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
long time2 = System.nanoTime();
System.out.println("StringFormat:"+(time2-time1)+"ns"); long time3 = System.nanoTime();
resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
long time4 = System.nanoTime();
System.out.println("String add:"+(time4-time3)+"ns"); long time5 = System.nanoTime();
sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite);
long time6 = System.nanoTime();
System.out.println("StringBuilder add:"+(time6-time5)+"ns");
System.out.println("-------------------------------------------------");
} @Test
public void test1(){
for(int i=0; i<1000; i++){
method1();
}
}
运行结果:
- StringFormat:58025ns
- String add:3158ns
- StringBuilder add:1579ns
- -------------------------------------------------
- StringFormat:43026ns
- String add:3948ns
- StringBuilder add:1974ns
- -------------------------------------------------
- .....
- StringFormat:46973ns
- String add:1579ns
- StringBuilder add:790ns
- -------------------------------------------------
- StringFormat:52499ns
- String add:1578ns
- StringBuilder add:790ns
- -------------------------------------------------
- StringFormat:43026ns
- String add:1579ns
- StringBuilder add:790ns
- -------------------------------------------------

StringFormat:58025ns
String add:3158ns
StringBuilder add:1579ns
-------------------------------------------------
StringFormat:43026ns
String add:3948ns
StringBuilder add:1974ns
-------------------------------------------------
.....
StringFormat:46973ns
String add:1579ns
StringBuilder add:790ns
-------------------------------------------------
StringFormat:52499ns
String add:1578ns
StringBuilder add:790ns
-------------------------------------------------
StringFormat:43026ns
String add:1579ns
StringBuilder add:790ns
-------------------------------------------------
从上述结果可知,StringBuilder与String直接相加的执行效率都比String.format高, 而StringBuilder的执行效率要比String直接相加要高点。下面针对String,StringBuilder再
做一组测试。
测试代码2:
- <span style="white-space:pre"> </span>public void method2(int num){
- String text = "";
- long beginTime = System.nanoTime();
- for(int i = 0; i < num; i++){
- text += i;
- }
- long endTime = System.nanoTime();
- System.out.println("String直接相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
- StringBuilder builder = new StringBuilder("");
- beginTime = System.nanoTime();
- for(int i = 0; i < num; i++){
- builder.append(i);
- }
- endTime = System.nanoTime();
- System.out.println("StringBuilder相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
- System.out.println("---------------------------------------------------");
- }
- @Test
- public void test2(){
- method2(10);
- method2(100);
- method2(10000);
- method2(100000);
- }

<span style="white-space:pre"> </span>public void method2(int num){
String text = "";
long beginTime = System.nanoTime();
for(int i = 0; i < num; i++){
text += i;
}
long endTime = System.nanoTime();
System.out.println("String直接相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
StringBuilder builder = new StringBuilder("");
beginTime = System.nanoTime();
for(int i = 0; i < num; i++){
builder.append(i);
}
endTime = System.nanoTime();
System.out.println("StringBuilder相加"+num+"次耗费时间:" + (endTime - beginTime)+"ns");
System.out.println("---------------------------------------------------");
} @Test
public void test2(){
method2(10);
method2(100);
method2(10000);
method2(100000);
}
运行结果:
- String直接相加10次耗费时间:19737ns
- StringBuilder相加10次耗费时间:3553ns
- ---------------------------------------------------
- String直接相加100次耗费时间:56447ns
- StringBuilder相加100次耗费时间:47762ns
- ---------------------------------------------------
- String直接相加10000次耗费时间:266082677ns
- StringBuilder相加10000次耗费时间:999061ns
- ---------------------------------------------------
- String直接相加100000次耗费时间:45212528095ns
- StringBuilder相加100000次耗费时间:3040604ns
- ---------------------------------------------------

String直接相加10次耗费时间:19737ns
StringBuilder相加10次耗费时间:3553ns
---------------------------------------------------
String直接相加100次耗费时间:56447ns
StringBuilder相加100次耗费时间:47762ns
---------------------------------------------------
String直接相加10000次耗费时间:266082677ns
StringBuilder相加10000次耗费时间:999061ns
---------------------------------------------------
String直接相加100000次耗费时间:45212528095ns
StringBuilder相加100000次耗费时间:3040604ns
---------------------------------------------------
从测试结果可分析出,StringBuilder的效率是比String高。
再来看一个测试,代码和上面的一样,只是SringBuilder加上个toString
测试代码:
- String success_code = "0";
- byte splite = 0x01;
- private void method1(){
- String resultMsg = "";
- long time1 = System.nanoTime();
- resultMsg = String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
- long time2 = System.nanoTime();
- System.out.println("StringFormat:"+(time2-time1)+"ns");
- long time3 = System.nanoTime();
- resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
- long time4 = System.nanoTime();
- System.out.println("String add:"+(time4-time3)+"ns");
- long time5 = System.nanoTime();
- resultMsg = sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite).toString();
- long time6 = System.nanoTime();
- System.out.println("StringBuilder add:"+(time6-time5)+"ns");
- System.out.println("-------------------------------------------------");
- }

String success_code = "0"; byte splite = 0x01; private void method1(){
String resultMsg = "";
long time1 = System.nanoTime();
resultMsg = String.format("ErrorCode=%s%cErrorMsg=心跳包接收成功%c", success_code, splite, splite);
long time2 = System.nanoTime();
System.out.println("StringFormat:"+(time2-time1)+"ns"); long time3 = System.nanoTime();
resultMsg = "ErrorCode="+success_code+splite+"ErrorMsg=心跳包接收成功"+splite;
long time4 = System.nanoTime();
System.out.println("String add:"+(time4-time3)+"ns"); long time5 = System.nanoTime();
resultMsg = sb.append("ErrorCode=").append(success_code).append(splite).append("ErrorMsg=心跳包接收成功").append(splite).toString();
long time6 = System.nanoTime();
System.out.println("StringBuilder add:"+(time6-time5)+"ns");
System.out.println("-------------------------------------------------");
}
- <span style="white-space:pre"> </span>@Test
- public void test1(){
- for(int i=0; i<10; i++){
- method1();
- }
- }

<span style="white-space:pre"> </span>@Test
public void test1(){
for(int i=0; i<10; i++){
method1();
}
}
运行结果:
- StringFormat:564859ns
- String add:55657ns
- StringBuilder add:3158ns
- -------------------------------------------------
- StringFormat:98683ns
- String add:2368ns
- StringBuilder add:1974ns
- -------------------------------------------------
- StringFormat:69867ns
- String add:2369ns
- StringBuilder add:1974ns
- -------------------------------------------------
- StringFormat:77762ns
- String add:3552ns
- StringBuilder add:2369ns
- -------------------------------------------------
- StringFormat:105788ns
- String add:3948ns
- StringBuilder add:2368ns
- -------------------------------------------------
- StringFormat:78552ns
- String add:2763ns
- StringBuilder add:1974ns
- -------------------------------------------------
- StringFormat:68683ns
- String add:2368ns
- StringBuilder add:1974ns
- -------------------------------------------------
- StringFormat:67894ns
- String add:2369ns
- StringBuilder add:1973ns
- -------------------------------------------------
- StringFormat:67499ns
- String add:2369ns
- StringBuilder add:1974ns
- -------------------------------------------------
- StringFormat:116840ns
- String add:3948ns
- StringBuilder add:3552ns
- -------------------------------------------------

StringFormat:564859ns
String add:55657ns
StringBuilder add:3158ns
-------------------------------------------------
StringFormat:98683ns
String add:2368ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:69867ns
String add:2369ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:77762ns
String add:3552ns
StringBuilder add:2369ns
-------------------------------------------------
StringFormat:105788ns
String add:3948ns
StringBuilder add:2368ns
-------------------------------------------------
StringFormat:78552ns
String add:2763ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:68683ns
String add:2368ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:67894ns
String add:2369ns
StringBuilder add:1973ns
-------------------------------------------------
StringFormat:67499ns
String add:2369ns
StringBuilder add:1974ns
-------------------------------------------------
StringFormat:116840ns
String add:3948ns
StringBuilder add:3552ns
-------------------------------------------------
当运行10次时,均显示StringBuilder.append.toString的效率比String的直接相加高。
测试执行10000次,结果如下:
- StringFormat:9079ns
- String add:789ns
- StringBuilder add:153550ns
- -------------------------------------------------
- StringFormat:18552ns
- String add:789ns
- StringBuilder add:141708ns
- -------------------------------------------------
- StringFormat:9078ns
- String add:395ns
- StringBuilder add:122761ns
- -------------------------------------------------

StringFormat:9079ns
String add:789ns
StringBuilder add:153550ns
-------------------------------------------------
StringFormat:18552ns
String add:789ns
StringBuilder add:141708ns
-------------------------------------------------
StringFormat:9078ns
String add:395ns
StringBuilder add:122761ns
-------------------------------------------------
highcharts 大数据 String+,StringBuilder,String.format运行效率比较的更多相关文章
- String+ String.Concat String.Format StringBuilder 之间的性能测试
找到一篇国外的代码,专门来测试这个, String+ String.Concat String.Format StringBuilder 前三个在100个左右字符串差不多, String.Concat ...
- [C#] string 与 String,大 S 与小 S 之间没有什么不可言说的秘密
string 与 String,大 S 与小 S 之间没有什么不可言说的秘密 目录 小写 string 与大写 String 声明与初始化 string string 的不可变性 正则 string ...
- difference among String,StringBuilder,StringBuffer
difference among String,StringBuilder,StringBuffer String常用构造函数 String(byte[] bytes) String(byte[] b ...
- String StringBuilder StringBuffer 对比 总结得非常好
转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...
- 谈String,StringBuilder,StringBuffer随笔
一.谈谈三者在实现上的区别. (1)先看String 方法,实现了Serializable, Comparable, CharSequence三个接口 package java.lang; imp ...
- (转)String StringBuilder StringBuffer 对比 总结得非常好
来源:http://blog.csdn.net/clam_clam/article/details/6831345 转自:http://www.iteye.com/topic/522167 作者:每次 ...
- Java中 StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...
- Android jni/ndk编程二:jni数据类型转换(primitive,String,array)
一.数据类型映射概述 从我们开始jni编程起,就不可能避开函数的参数与返回值的问题.java语言的数据类型和c/c++有很多不同的地方,所以我们必须考虑当在java层调用c/c++函数时,怎么正确的把 ...
- StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加 StringBui ...
随机推荐
- vue cli搭建项目
1.首先电脑要在安装node环境下才能运行 2.全局安装webpack:npm install webpack -g 3.安装vue脚手架: npm install vue-cli -g 4.新建文件 ...
- (57)Wangdao.com第九天_JavaScript 对象的简介及分类
对象 引用数据类型. 对象是一种复合的数据类型,可以存储多个不同类型的变量. 以后我们看到的,只要不是String.Number.Boolean.Null.Undefined,那么就一定是 Objec ...
- AWS Nginx Started but not Serving AWS上Nginx服务器无法正常工作
After install the Nginx on AWS instance, and visit your public ip address, you might see the followi ...
- 阿里云 ACP 考试学习过程分享
目录 考证意义 学习方法 ACP 报名 学习安排[重要] 考试当天 其他 经验贴 考证意义 证多不压身,证比项目经历更具有说服力,证是行业的标准认证.更多时候,是有证的人说,"证其实不重要& ...
- SpringBoot微服务架构下的MVC模型总结
SpringBoot微服务架构下的MVC模型产生的原因: 微服务概念改变着软件开发领域,传统的开源框架结构开发,由于其繁琐的配置流程 , 复杂的设置行为,为项目的开发增加了繁重的工作量,微服务致力于解 ...
- F#周报2019年第15期
新闻 Hedgehog新站点 Bolero 0.4发布,增加远程认证 FsToolkit.ErrorHandling与Cvdm.ErrorHandling合并了 F#里的3D图形编程与游戏开发 有趣的 ...
- MySQL8.0.15的安装与配置---win10
1.下载地址 https://dev.mysql.com/downloads/installer/ 安装文件:mysql-installer-community-8.0.15.0.msi 2.安装 默 ...
- treesoft,couchDB,
下载 docker 镜像:docker pull docker.io/lu566/treesoft:1.0启动容器:docker run -d -p 127.0.0.1:18080:8080 dock ...
- JAVA RPC (六) 之thrift反序列化RPC消息体
我们来看一下服务端的简单实现,直接上thrift代码,很直观的来看一看thrift的server到底干了些什么 public boolean process(TProtocol in, TProtoc ...
- 微信小程序区分点击,长按事件
在上代码之前,微信小程序点击事件,长按事件的触发顺序需要我们了解一下下 事务分类 touchstart:手指触摸 longtap:手指触摸后后,超过350ms离开 touchend:手指触摸动作结束 ...