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[] ...
随机推荐
- 第17月第7天 iOS 数组越界,防Crash处理
1. 上面方法已经可以避免crash,为了避免冗余的代码,写一个NSArray的分类,利用runtime替换NSArray的对象方法objectAtIndex:,在这里进行判断,捕获异常: #impo ...
- 在虚拟机安装windows xp时所需要的序列号
最新的windows xp sp3序列号 xp序列号 最新的windows xp sp3序列号(绝对可通过正版验证) MRX3F-47B9T-2487J-KWKMF-RPWBY(工行版) 可用(强推 ...
- Microservice Patterns
https://www.manning.com/books/microservice-patterns http://www.jianshu.com/p/2f32ac949138
- Delpher 必记-delphi环境安装
//Delpher 必记 环境: 安装包: 1.所有第三方控件包放在没有中文名的路径:如F:\DComp 安装包放在对应的版本的文件夹里面(实际中没有分类),然后看安装包的引用路径和输出路径,都要设定 ...
- windws 下 sublime Text 3 ·安装的安装与激活
下载sublime 我们可以到官网进行下载对应的版本 https://www.sublimetext.com/3 如下是官网的内容(我选择的是Windows 64 bit). Sublime Text ...
- Database学习 - mysql 数据库 外键
外键 外键约束子表的含义:如果在父表中赵达不到候选键,则不允许在子表上进行insert/update 外键预约对父表的含义:在父表上进行update/delete以更新或删除子表中有一条或多条对应匹配 ...
- FPN-Feature Pyramid Networks for Object Detection
FPN-Feature Pyramid Networks for Object Detection 标签(空格分隔): 深度学习 目标检测 这次学习的论文是FPN,是关于解决多尺度问题的一篇论文.记录 ...
- 【网络编程1】网络编程基础-TCP、UDP编程
网络基础知识 网络模型知识 OSI七层模型:(Open Systems Interconnection Reference Model)开放式通信系统互联参考模型,是国际标准化组织(ISO)提出的一个 ...
- 如果你的ie内核浏览器总是缓冲数据的话
如果你的ie内核浏览器总是缓冲数据的话 运行cmd,输入netsh winsock reset wincock是支持多种协议的网络编程接口 因为ie内核的浏览器的一些设置和插件可能会被其他软件篡改,所 ...
- ES系列八、正排索Doc Values和Field Data
1.Doc Values 聚合使用一个叫Doc Values的数据结构.Doc Values使聚合更快.更高效且内存友好. Doc Values的存在是因为倒排索引只对某些操作是高效的.倒排索引的优势 ...