Java中String和StringBuffer对于拼接运算中效率的对比
Java中String和StringBuffer对于拼接运算中效率的对比
String类型在java中是immutable,意思就是不可变的,每次对String进行拼接操作,实际在jvm中都是new了一个新的String,随着String的new的次数越多,会造成虚拟机速度下降。
StringBuffer的内部实际是一个字符数组,对于不同的jdk可以使用以下方法查看其实际的大小和容量(请参考下面的代码),注意:这是两个不同的概念,具体请参考API的文档。
String str1 = "redpig"; StringBuffer sb = new StringBuffer(str1); System.out.println(sb.length()); //内容长度 System.out.println(sb.capacity());//总空间
如果每次随机生成10个字符(仅限于大小写字母和数字),重复10000次,此时可以清楚看到String和StringBuffer的运行效率。
import java.util.Random; public class TestStrAndStrBuf { private static char[] characterPool = new char[62]; static { char c = 0; int i = 0; for (c = 'a'; c < 'z'; c++, i++) characterPool[i] = c; for (c = 'A'; c < 'Z'; c++, i++) characterPool[i] = c; for (c = '0'; c < '9'; c++, i++) characterPool[i] = c; } public static void main(String[] args) { appendString(10000, 10); appendStringBuffer(10000, 10); } public static char[] getRandomCharacters(int charactersLength) { char[] chars = new char[charactersLength]; Random r = new Random(); for (int i = 0; i < charactersLength; i++) chars[i] = characterPool[Math.abs(r.nextInt()) % characterPool.length]; return chars; } public static void appendString(int times, int charactersLength) { String string = new String(); long startTime = System.currentTimeMillis(); for (int i = 0; i < times; i++) string += String.valueOf(getRandomCharacters(charactersLength)); long endTime = System.currentTimeMillis(); System.out.println("Run time is " + (endTime - startTime)); } public static void appendStringBuffer(int times, int charactersLength) { StringBuffer stringBuffer = new StringBuffer(); long startTime = System.currentTimeMillis(); for (int i = 0; i < times; i++) stringBuffer.append(getRandomCharacters(charactersLength)); long endTime = System.currentTimeMillis(); System.out.println("Run time is " + (endTime - startTime)); } }
不同的硬件和软件运行出来的结果有所区别,本机中的效果如下:
所以,针对字符频繁改动的应用中,请使用StringBuffer!
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Python使用函数计算与API网关产品组合之踩坑成果-praffa轻型框架
话说不是在踩坑,就是在踩坑的夜里。学了Python三脚猫的功夫,打算彻底放弃ECS,使用函数计算和API网关创建一个后端应用。一圈下来,好不容易踩过去了,这就把总结留下的一个小框架贡献出来,让再来的人好走一些。 废话不多说,先奉上GitHub地址:https://github.com/YONGDAOYUN/praffa praffa是什么? Python Restful Api Farmwok For Aliyun的首字母简写。是一款针对阿里云的函数计算+API网关产品开发的轻型框架。 开发说明 在method里的Example是示例类,类文件名、类名、method三者同名,建议采用大驼峰规则定义,例如:GetUserInfo 主返回方法名必须是handler,并且放在类方法的最后一个。其他代码自己是自己业务代码。 类库文件增删改要在__init__.py文件里报备哦。如:__all__ = ["Example"] method放到API网关配置的Query里,配置为映射方式,body为非表单提交模式的JSON 图解从零开始 鼠标放在图片上有说明
- 下一篇
使用Sanic开发快速异步响应的Web程序
Sanic是一个类似Flask、仅仅支持Python 3.5+ 版本的web 服务器,旨在运行速度更快。在类似Flask的基础上,Sanic支持异步请求处理,也就是说,你可以使用Python 3.5 中全新而又亮眼的 async/await 语法,使你的代码非阻塞且快速。 下面是一个最简单的Sanic Web 程序: from sanic import Sanic from sanic.response import json app = Sanic() @app.route("/") async def test(request): return json({"hello": "world"}) if __name__ == "__main__": app.run(host="0.0.0.0", port=8000) 以上代码显示了Sanic的基本用法: 全局生成一个Sanic对象:app = Sanic()Web路由由装饰器@app.route()管理,也可以通过url_for()、add_route()指定(详见文档)请求响应函数用async声明进行异步处理,输入必须有reque...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
-
Docker使用Oracle官方镜像安装(12C,18C,19C)
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS8编译安装MySQL8.0.19
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
推荐阅读
最新文章
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS7安装Docker,走上虚拟化容器引擎之路
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- Docker安装Oracle12C,快速搭建Oracle学习环境