Java中测试StringBuilder、StringBuffer、String在字符串拼接上的性能
应一个大量字符串拼接的任务
测试一下StringBuilder、StringBuffer、String在操作字符串拼接时候的性能
性能上理论是StringBuilder > StringBuffer > String
测试方法:
创建一个StirngTest类含有静态常量字符串是26个字母,以及一个循环轮数
在测试时采用循环来操作字符串的拼接,计算操作时间并输出:
package com.test.xlc;
import java.util.Random;
public class StringTest {
static final String strFinal = "abcdefghijklmnopqrstovwxyz";
static final int forInt = 100;
static void StringBuilderTest() {
Random rand = new Random(47);
StringBuilder strB = new StringBuilder();
long start = System.currentTimeMillis();
for(int i = 0; i < forInt; ++i) {
int randInt = rand.nextInt(23);
strB.append(strFinal.substring(randInt, randInt + 4));
}
long end = System.currentTimeMillis();
// System.out.println(strB.toString());
System.out.println("StringBuilderTest:" + (end - start));
}
static void StringBufferTest() {
Random rand = new Random(47);
StringBuffer strB = new StringBuffer();
long start = System.currentTimeMillis();
for(int i = 0; i < forInt; ++i) {
int randInt = rand.nextInt(23);
strB.append(strFinal.substring(randInt, randInt + 4));
}
long end = System.currentTimeMillis();
// System.out.println(strB.toString());
System.out.println("StringBufferTest:" + (end - start));
}
static void StringOnly() {
Random rand = new Random(47);
String str = "";
long start = System.currentTimeMillis();
for(int i = 0; i < forInt; ++i) {
int randInt = rand.nextInt(23);
str += strFinal.substring(randInt, randInt + 4);
}
long end = System.currentTimeMillis();
// System.out.println(str);
System.out.println("String:" + (end - start));
}
public static void main(String...args) {
StringBuilderTest();
StringBufferTest();
StringOnly();
}
}
测试循环次数:
100
StringBuilderTest:0
StringBufferTest:0
String:0
1000
StringBuilderTest:1
StringBufferTest:0
String:7
10000
StringBuilderTest:2
StringBufferTest:2
String:217
100000
StringBuilderTest:12
StringBufferTest:10
String:17136
1000000
StringBuilderTest:55
StringBufferTest:53
我提前终止了
之后我又测试了拼接长串,本实验结果显示在拼接字符串的效率上:
StringBuffer > StringBuilder > String
Java中测试StringBuilder、StringBuffer、String在字符串拼接上的性能的更多相关文章
- [java] StringBuilder / StringBuffer / String 建立字符串
1.三者在建立新字符串速度方面的比较: StringBuilder > StringBuffer > String 2.线程安全性: StringBuilder:线程非安全的 Str ...
- Java中,那些关于String和字符串常量池你不得不知道的东西
老套的笔试题 在一些老套的笔试题中,会要你判断s1==s2为false还是true,s1.equals(s2)为false还是true. String s1 = new String("xy ...
- JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么?
JAVA 中的 StringBuilder 和 StringBuffer 适用的场景是什么? 最简单的回答是,stringbuffer 基本没有适用场景,你应该在所有的情况下选择使用 stringbu ...
- JAVA StringBuilder StringBuffer String比较
字符串连接时的效率: StringBuilder>StringBuffer>String 区别: StringBuilder效率最高,但是不是线程安全的,适用于单线程.多线程用String ...
- java中的数据类型,运算符,字符串,输入输出,控制流,大数值,数组; 《java核心技术卷i》 第三章:java基本程序结构;
<java核心技术卷i> 第三章:java基本程序结构: 每次看书,去总结的时候,总会发现一些新的东西,这次对于java的数组有了更深的了解: java中的数据类型,运算符,字符串,输入输 ...
- java中int转成String位数不足前面补零
java中int转成String位数不足前面补零 转载自:http://ych0108.iteye.com/blog/2174134 java中int转String位数不够前面补零 String.fo ...
- java中的switch用String作为条件
在开发java程序的过程中,我们遇到了条件推断首选就是switch,可是java中的switch功能不支持字符串作为条件.这时我们该怎么办呢? --使用枚举. 一.枚举简单了解 1.enum是一 ...
- 如何在Java中测试类是否是线程安全的
通过优锐课的java核心笔记中,我们可以看到关于如何在java中测试类是否线程安全的一些知识点汇总,分享给大家学习参考. 线程安全性测试与典型的单线程测试不同.为了测试一个方法是否是线程安全的,我们需 ...
- Java中toString()与new String()
Java中toString()与new String(): 1.错误演示: FileInputStream fileIn = new FileInputStream(filePath);byte[] ...
随机推荐
- 计算正多边形的面积 Gym - 101840G
http://codeforces.com/gym/101840/attachments 题目大意:输入n,r,k .n代表往外扩张几次,r代表圆的内接圆半径,k代表多边形的边长.问你每次扩张多边形和 ...
- ichartjs一分钟快速入门教程
1.构建项目环境 由于ichartjs是一个js库,所以只要将ichart.js加入你页面的head中就完成了ichartjs的运行环境.代码如下: <script type="tex ...
- dbms_metadata.get_ddl的用法(DDL)
dbms_metadata包中的get_ddl函数 --GET_DDL: Return the metadata for a single object as DDL. -- This interfa ...
- ROS学习笔记(二) # ROS NodeHandles
1. 自动启动和关闭 ros::NodeHandle nh: 这段代码执行之后,如果内部节点还没有启动,ros::NodeHandle 会启动这个节点:一旦所有的 ros::NodeHandle 实例 ...
- MFC_CFileDialog_选择单一文件
场景 选择单一文件 技术点 CFileDialog CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, ...
- BN讲解(转载)
本文转载自:http://blog.csdn.net/shuzfan/article/details/50723877 本次所讲的内容为Batch Normalization,简称BN,来源于< ...
- mysql锁表与不锁表设置主从复制的方法
有时候MySQL主从同步不一致比较严重的时候,需要手动同步.先说说在锁表的情况下如何操作:以下是其简要过程 1.先对主库锁表FLUSH TABLES WITH READ LOCK; 2.备份数据mys ...
- 读SRE Google运维解密有感(三)
前言 这是读“SRE Google运维解密”有感第三篇,之前的文章可访问www.addops.cn来查看.我们今天来聊聊“on call”也就是运维值班制度, 本人到目前为止也还在参与一线运维的值班, ...
- zabbix添加对自定义无规则的关键日志文件的监控
zabbix添加对自定义无规则日志文件的监控 项目背景及思路: zabbix自带有针对日志文件的监控,自带的监控只能监控到指定文件或者正则匹配的固定日志文件,但当需要监控的文件名没有规律的时候自带监控 ...
- centos6环境创建局域网http方式的yum源
环境: yum服务器:centos 6.3 :192.168.8.20 yum源客户端:centos6.5 使用的主要rpm包来自centos6.5光盘 yum源服务器端配置: 1. 首先需要检查一下 ...