当前位置: 首页 > news >正文

JavaStringBuffer与StringBuilder

StringBuffer、StringBuilder

文章目录

  • StringBuffer、StringBuilder
    • StringBuffer和StringBuilder的理解
    • 可变性分析
      • 对于String
      • 对于StringBuilder
    • 常用方法
    • 执行效率对比

StringBuffer和StringBuilder的理解

String 不可变的字符序列

StringBuffer 可变的字符序列 JDK1.0声明,线程安全 , 效率低

StringBuilder 可变的字符序列 JDK5.0声明 ,线程不安全 ,效率高

可变性分析

对于String

String s1 = new String() ; //char[] value = new char[0];
String s2 = new STring("abc");	//char[] value = new char[3]{'a','b,'c'};

对于StringBuilder

char []value;	//存储字符序列
int count;	//实际存储的字符个数
StringBuilder sBuffer1 = new StringBuilder();	//char[] value = new char[16];
StringBuilder sBuffer2 = new StringBuilder("abc");	//char[] value = new char[16 + "abc".length];
sBuffer1.append("ab");	//value[0] = 'a'; value[1] = 'c';
sBuffer1.append("b");	//value[2] = 'b';
//最多修改16个
//一旦count超过value.length时,就需要扩容
//默认扩容为原有容量的2倍 + 2 。 并将原有的value数组中的元素复制到新的数组中
  • 如果开发中,需要频繁的针对于字符串进行 增删改 等操作 ,建议使用StringBuffer StringBuilder替换String

  • 若不涉及线程安全问题,建议使用StringBuffer 替换 StringBuilder

  • 若大体确定需要操作的字符的个数,建议使用int capacity的构造器,避免底层多次扩容操作,效率降低

常用方法

StringBuilder、StringBuffer的API是完全一致的,并且很多方法与String相同。

//常用API1StringBuffer append(xx):提供了很多的append()方法,用于进行字符串追加的方式拼接
(2StringBuffer delete(int start, int end):删除[start,end)之间字符
(3StringBuffer deleteCharAt(int index):删除[index]位置字符
(4StringBuffer replace(int start, int end, String str):替换[start,end)范围的字符序列为str
(5void setCharAt(int index, char c):替换[index]位置字符
(6char charAt(int index):查找指定index位置上的字符
(7StringBuffer insert(int index, xx):在[index]位置插入xx
(8int length():返回存储的字符数据的长度
(9StringBuffer reverse():反转
//其他API1int indexOf(String str):在当前字符序列中查询str的第一次出现下标
(2int indexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的第一次出现下标
(3int lastIndexOf(String str):在当前字符序列中查询str的最后一次出现下标
(4int lastIndexOf(String str, int fromIndex):在当前字符序列[fromIndex,最后]中查询str的最后一次出现下标
(5String substring(int start):截取当前字符序列[start,最后]6String substring(int start, int end):截取当前字符序列[start,end)7String toString():返回此序列中数据的字符串表示形式
(8void setLength(int newLength) :设置当前字符序列长度为newLength
  • StringBuffer append(xx)

    public class StringBufferTest{public static void main(String []args){StringBuilder sBuilder = new StringBuilder();sBuilder.append("abc").append("def");	//方法链调用System.out.println(sBuilder);	//abcdef}
    }
    
  • StringBuffer delete(int start, int end)

     public class StringBufferTest{public static void main(String []args){StringBuilder stringBuilder = new StringBuilder("helloworld");System.out.println(stringBuilder.delete(5, stringBuilder.length()));	//hello}}
    
  • StringBuffer deleteCharAt(int index)

    public calss StringBufferTest{public static void main(String []args){StringBuilder stringBuilder = new StringBuilder("Java");System.out.println(stringBuilder.deleteCharAt(0));  //ava}
    }
    
  • StringBuffer replace(int start, int end, String str)

    public class StringBufferTest{public static void main(String []args){StringBuilder stringBuilder = new StringBuilder("Java");System.out.println(stringBuilder.replace(0, stringBuilder.length(), "helloworld")); //helloworldSystem.out.println(stringBuilder);  //helloworld}
    }
    

执行效率对比

效率排序

StringBuilder > StringBuffer > String

public class RuntimeTest{public static void main(String []args){long startTime = 0L;long endTime = 0L;String text = "";StringBuffer buffer = new StringBuffer("");StringBuilder builder = new StringBuilder("");startTime = System.currentTimeMillis();for (int i = 0; i < 20000; i++) {buffer.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuffer运行时间" + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < 20000; i++) {builder.append(String.valueOf(i));}endTime = System.currentTimeMillis();System.out.println("StringBuilder运行时间" + (endTime - startTime));startTime = System.currentTimeMillis();for (int i = 0; i < 20000; i++) {text = text + i;}endTime = System.currentTimeMillis();System.out.println("String运行时间" + (endTime - startTime));}
}
//
//StringBuffer运行时间2
//StringBuilder运行时间1
//String运行时间274

相关文章:

JavaStringBuffer与StringBuilder

StringBuffer、StringBuilder 文章目录 StringBuffer、StringBuilderStringBuffer和StringBuilder的理解可变性分析对于String对于StringBuilder 常用方法执行效率对比 StringBuffer和StringBuilder的理解 String 不可变的字符序列 StringBuffer 可变的字符序列 JDK1.0声明&…...

云徙科技助力竹叶青实现用户精细化运营,拉动全渠道销售额增长

竹叶青茶以其别具一格的风味与深厚的历史底蕴&#xff0c;一直被誉为茶中瑰宝。历经千年的传承与创新&#xff0c;竹叶青不仅坚守着茶叶品质的极致追求&#xff0c;更在数字化的浪潮中&#xff0c;率先打破传统&#xff0c;以科技力量赋能品牌&#xff0c;成为茶行业的领军者。…...

深度揭秘:深度学习框架下的神经网络架构进化

深度学习框架下的神经网络架构经历了从基础到复杂的显著进化&#xff0c;这一进程不仅推动了人工智能领域的突破性进展&#xff0c;还极大地影响了诸多行业应用。本文旨在深入浅出地揭示这一进化历程&#xff0c;探讨关键架构的创新点及其对现实世界的影响。 引言&#xff1a;…...

MySQL的DML语句

文章目录 ☃️概述☃️DML☃️添加数据☃️更新和删除数据☃️DML的重要性 ☃️概述 MySQL 通用语法分类 ● DDL: 数据定义语言&#xff0c;用来 定义数据库对象&#xff08;数据库、表、字段&#xff09; ● DML: 数据操作语言&#xff0c;用来对数据库表中的数据进行增删改 …...

Wireshark的基本用法以及注意事项

Wireshark 是一个流行的网络协议分析工具&#xff0c;可以捕获和分析网络数据包。以下是一些常见的 Wireshark 的用法&#xff1a; 安装和启动&#xff1a;首先需要下载和安装 Wireshark。安装完成后&#xff0c;可以通过启动 Wireshark 应用程序来打开它。 选择网络接口&…...

集团门户网站的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;论坛管理&#xff0c;集团文化管理&#xff0c;基础数据管理&#xff0c;公告通知管理 前台账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;论坛&#xff0…...

Tomcat基础详解

第一篇&#xff1a;Tomcat基础篇 lecture&#xff1a;邓澎波 一、构建Tomcat源码环境 工欲善其事必先利其器&#xff0c;为了学好Tomcat源码&#xff0c;我们需要先在本地构建一个Tomcat的运行环境。 1.源码环境下载 源码有两种下载方式&#xff1a; 1.1 官网下载 https://…...

【Python爬虫】爬取名人名言页面并进行简单的数据清洗(入门级)

目录 资源链接 一、网站选择 二、数据爬取要求 三、数据清洗要求 四、实现代码 1.数据采集 2.数据清洗 资源链接 下面有笔者所放的源码下载链接&#xff0c;读者可自行下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1YmTdlnbSJLvLrrx92zz6Qg 提取码&…...

Microsoft Visual C++ Redistributable 【安装包】【高速下载】

方法1、可以从官方下载&#xff0c;如下图 Visual C Redistributable for Visual Studio 2015 但是此链接只有一个版本 方法2 已经下载好并且已经整理好了2008--2022的所有版本点击下方链接即可高速下载 如果是win7-win8-win10-win11直接可以下载2015--2022版本&#xff0c…...

MFC绘制哆啦A梦

文章目录 OnPaint绘制代码完整Visual Studio工程下载其他卡通人物绘制 OnPaint绘制代码 CPaintDC dc(this); // 用于绘画的设备上下文CRect rc;GetWindowRect(rc);int cxClient rc.Width();int cyClient rc.Height();// 辅助线HPEN hPen CreatePen(PS_DOT, 1, RGB(192, 192,…...

网络编程(TCP协议,UDP协议)

目录 网络编程三要素 IP IPv4 InetAddress类 端口号 协议 UDP协议 UDP协议发送数据 UDP协议接收数据 UDP的三种通信方式(代码实现) TCP协议 TCP通信程序 三次握手和四次挥手 练习 1、客户端:多次发送数据服务器:接收多次接收数据&#xff0c;并打印 2、客户端…...

读取Jar包下文件资源的问题及解决方案

问题 项目A代码调用到Resouces下的文件a.sh&#xff0c;打包成Jar包后&#xff0c;项目B调用对应方法时&#xff0c;出现报错&#xff0c;找不到a.sh文件路径&#xff0c;原来的代码可能是&#xff1a; URL resource getClass().getClassLoader().getResource("a.sh&qu…...

C++ 反转一个二进制串

描述 一个32位有符号整数&#xff0c;用二进制编码来表示。现需要将该二进制编码按位反转&#xff0c;计算出反转后的值。 示例1 输入&#xff1a; 1 返回值&#xff1a; -2147483648 说明&#xff1a; 00000000 00000000 00000000 00000001 翻转后为 10000000 000000…...

黑神话悟空-吉吉国王版本【抢先版】

在中国的游戏市场中&#xff0c;一款名为“黑神话悟空”的游戏引起了广泛的关注。这款游戏以中国传统的神话故事“西游记”为背景&#xff0c;创造了一个令人震撼的虚拟世界。今天&#xff0c;我们要来介绍的是这款游戏的一种特殊版本&#xff0c;那就是吉吉国王版本。 在吉吉国…...

【尚庭公寓SpringBoot + Vue 项目实战】预约看房与租约管理(完结)

【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09; 文章目录 【尚庭公寓SpringBoot Vue 项目实战】预约看房与租约管理&#xff08;完结&#xff09;1、业务说明2、接口开发2.1、预约看房管理2.1.1.保存或更新看房预约2.1.2. 查询个人预约…...

java拼图小游戏项目

创建一个Java拼图小游戏是一个有趣且富有教育意义的项目&#xff0c;可以锻炼你的编程技能。以下是开发一个基本拼图游戏可能需要考虑的几个步骤&#xff1a; 项目规划&#xff1a; 确定游戏的基本规则和玩法。设计游戏的界面和用户交互。 环境搭建&#xff1a; 确保你的开发环…...

[C++][数据结构][跳表]详细讲解

目录 0.什么是跳表&#xff1f;1.SkipList的优化思路2.SkipList的效率如何保证&#xff1f;3.SkipList实现4.SkipList VS 平衡搜索树 && Hash 0.什么是跳表&#xff1f; SkipList本质上也是一种查找结构&#xff0c;用于解决算法中的查找问题&#xff0c;跟平衡搜索树…...

tinyxml

github下载相关的软件包&#xff0c;其中有四个文件需要主要需要关注就是分别是tinyxml12.cpp&#xff0c;tinyxml12.h&#xff0c;rss网页xml文件&#xff0c;还有就是官方给的test文件tinyxmltest.cpp。 example1就是提供一个打开文件的方式 int example_1() {XMLDocument …...

Docker(三)-Docker常用命令

1.run run命令执行流程:2.帮助启动类命令 2.1 启动docker systemctl start docker2.2 停止docker systemctl stop docker2.3 重启docker systemctl restart docker2.4查看docker状态 systemctl status docker2.5开机启动 systemctl enable docker2.6查看docker概要信息 …...

[MRCTF2020]PixelShooter

一个apk文件 jeb打开发现是apk文件 apk游戏逆向必须知道的知识: 一般关键数据在 Assets/bin/data/managed/assembly-csharp.dll这个文件里面 我不知道jeb为什么这里我没有 apk是个压缩包 直接解压 这个文件解压也可以发现flag {Unity_1S_Fun_233}...

用Lumerical MODE的EME Solver设计硅基波导耦合器:一个完整案例解析

硅基光子集成中的EME Solver实战&#xff1a;定向耦合器设计与性能优化全解析 光子集成电路(PIC)设计领域&#xff0c;模式展开法(EME)因其在长距离波导结构仿真中的独特优势&#xff0c;正成为工程师验证器件性能的首选工具。尤其在硅基定向耦合器这类关键无源器件的设计中&am…...

面试回答第十五问:类加载

类加载简介 类加载是JVM能够识别类信息&#xff0c;分配空间创建对象实例的基础。 类加载一共分为五阶段&#xff0c;分别是加载&#xff0c;验证&#xff0c;准备&#xff0c;解析&#xff0c;初始化五阶段。这不是顺序&#xff0c;不是加载之后才能验证&#xff0c;验证之后才…...

突破国际漫游限制:Nrfr免Root工具的终极解决方案

突破国际漫游限制&#xff1a;Nrfr免Root工具的终极解决方案 【免费下载链接】Nrfr &#x1f30d; 免 Root 的 SIM 卡国家码修改工具 | 解决国际漫游时的兼容性问题&#xff0c;帮助使用海外 SIM 卡获得更好的本地化体验&#xff0c;解锁运营商限制&#xff0c;突破区域限制 …...

Bypass Paywalls Clean:突破内容壁垒的智能解决方案

Bypass Paywalls Clean&#xff1a;突破内容壁垒的智能解决方案 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在信息爆炸的今天&#xff0c;你是否曾因学术论文被付费墙阻挡而错失研…...

如何快速上手VNote:跨平台Markdown笔记软件的完整指南

如何快速上手VNote&#xff1a;跨平台Markdown笔记软件的完整指南 【免费下载链接】vnote A pleasant note-taking platform. 项目地址: https://gitcode.com/gh_mirrors/vn/vnote VNote是一款基于Qt开发的免费开源Markdown笔记应用&#xff0c;专为追求高效编辑体验的用…...

xarray 实战指南 - 从数据操作到科学计算

1. 为什么你需要xarray&#xff1f; 第一次接触科学计算时&#xff0c;我用的是NumPy和Pandas。那时候处理气象数据&#xff0c;经常要手动管理维度、坐标和属性&#xff0c;一个简单的时空平均操作要写好几行代码。直到发现了xarray&#xff0c;才明白原来数据处理可以这么优雅…...

从磁力线到最小磁阻:手把手拆解一个微型直流电机的内部‘磁路战争’

从磁力线到最小磁阻&#xff1a;手把手拆解一个微型直流电机的内部‘磁路战争’ 拆开一枚硬币大小的玩具电机&#xff0c;你会看到一场无声的物理博弈——磁力线像急于回家的士兵&#xff0c;不断寻找最短路径&#xff1b;而转子则是这场战役的指挥官&#xff0c;通过精确的旋…...

惠普暗影精灵性能优化新选择:OmenSuperHub完全解析

惠普暗影精灵性能优化新选择&#xff1a;OmenSuperHub完全解析 【免费下载链接】OmenSuperHub 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否厌倦了官方Omen Gaming Hub的臃肿体验&#xff1f;想要一个纯净、高效且完全离线的惠普暗影精灵控制工具…...

Legacy iOS Kit:5个实用技巧让你的旧iPhone重获新生

Legacy iOS Kit&#xff1a;5个实用技巧让你的旧iPhone重获新生 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to downgrade/restore, save SHSH blobs, and jailbreak legacy iOS devices 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit 你是否有…...

破解微信小程序video组件的限制:3种禁止拖动进度条的实战方案对比

微信小程序视频播放控制深度解析&#xff1a;3种禁止拖动进度条的工程化方案 在知识付费和在线教育类小程序中&#xff0c;视频内容的完整播放率直接影响知识传递效果。但微信小程序原生video组件的enable-progress-gesture属性仅能禁用触摸手势&#xff0c;无法真正阻止进度条…...