第6章-第3节-Java中的字符串缓冲区:StringBuilder和StringBuffer

1、字符串缓冲区

理解:Java内存层面的一款容器(crud操作)

引入场景:
    根据需求需要对某字符串内容进行频繁的改动操作,
    如果使用String类原生的方式进行处理,则会在内存中产生大量的对象;
    面临的问题:内存压力剧增、程序的效率变低
    此时Java设计者提出了字符串缓冲区这种技术,就是用来解决上述的问题

作用/价值:
    对于字符串内容的频繁改动操作,自始至终不会产生新对象

类型:

1)、java.lang.StringBuffer类
2)、java.lang.StringBuilder类


【区别】:StringBuffer和StringBuilder的区别

都用于描述字符串缓冲区,并且是等价类,兼容api,所有api名字都相同;

StringBuffer类:
        jdk1.0就存在(古老)
        实行了同步,意味着是线程安全的类,效率低

StringBuilder类:
        jdk1.5版本才出现(较新)
        没有实行同步,意味着是线程不安全的类,效率高


常用构造方法:

StringBuilder() 
          构造一个不带任何字符的字符串生成器,其初始容量为 16 个字符。
StringBuilder(int capacity) 
          构造一个不带任何字符的字符串生成器,其初始容量由 capacity 参数指定。 
StringBuilder(String str) 
          构造一个字符串生成器,并初始化为指定的字符串内容。
      

 2、常用方法:因为两个类的api名完全一样,下面只以StringBuilder为例,使用它的机率更大:

/*1、增操作:appendinsert
*/
sb.append("abc").append(123).append(3.14).append(true);
sb.insert(5, "java");/*2、删操作:deletedeleteCharAt
*/
sb.delete(5, 8);    //含头不含尾
sb.deleteCharAt(5);/*2、改操作:reversesetCharAtsetLength
*/
sb.reverse();
sb.setCharAt(5, 'W');
sb.setLength(10);    //将容量设为10

3、为了比较String、StringBuilder、StringBuffer的性能与空间使用率,需要讲一个拓展:

System类:
    static long currentTimeMillis():返回以毫秒为单位的当前时间。 

    解析方法:
        得到1970年1月1日0点0分0秒至这一刻的毫秒数    称为:Unix时间戳

Runtime类:
    static Runtime getRuntime():返回与当前 Java 应用程序相关的运行时对象。 

    long totalMemory():返回 Java 虚拟机中的内存总量。 

    long freeMemory():返回 Java 虚拟机中的空闲内存量。 

然后下面代码比较性能:

public class TestSB_2 {public static void main(String[] args) {
//        testString();             //String类耗时:5664          String类占用内存:315650056
//        testStringBuffer();       //StringBuffer类耗时:20      StringBuffer类占用内存:5748280testStringBuilder();        //StringBuilder类耗时:16     StringBuilder类占用内存:5748416}public static void testString() {//记录当前时间long start = System.currentTimeMillis();String str = "";for (int i = 1;i <= 100000;i++) {str += i;}//记录当前时间long end = System.currentTimeMillis();System.out.println("String类耗时:" + (end - start));Runtime rt = Runtime.getRuntime();System.out.println("String类占用内存:" + (rt.totalMemory() - rt.freeMemory()));}public static void testStringBuffer() {//记录当前时间long start = System.currentTimeMillis();StringBuffer sb = new StringBuffer("");for (int i = 1;i <= 100000;i++) {sb.append(i);}//记录当前时间long end = System.currentTimeMillis();System.out.println("StringBuffer类耗时:" + (end - start));Runtime rt = Runtime.getRuntime();System.out.println("StringBuffer类占用内存:" + (rt.totalMemory() - rt.freeMemory()));}public static void testStringBuilder() {//记录当前时间long start = System.currentTimeMillis();StringBuilder sb = new StringBuilder("");for (int i = 1;i <= 100000;i++) {sb.append(i);}//记录当前时间long end = System.currentTimeMillis();System.out.println("StringBuilder类耗时:" + (end - start));Runtime rt = Runtime.getRuntime();System.out.println("StringBuilder类占用内存:" + (rt.totalMemory() - rt.freeMemory()));}
}

 本电子书目录:《Java基础的重点知识点全集》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/602700.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Generator - JavaScript的异步颠覆者

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ 目录 ✨ 前言 什么是Generator 生成器函数的执行流程控制 异步编程应用 ✨ 结语 ✨ 前言 Java…

Gitee

Gitee码云 0. 笔记说明1. Gitee概述2. Gitee和GitHub3. 创建Git远程仓库4. 分享已有项目到Gitee5. 文件恢复和合并6. 文件push或pull冲突7. 添加项目成员 0. 笔记说明 该笔记以IDEA 2023专业版进行操作需提前注册好个人gitee账号安装好IDEA的相关gitee插件或者安装Git Bash软件…

【机器学习】循环神经网络(二)-LSTM示例(keras)国际航空乘客问题的回归问题...

使用 Keras 在 Python 中使用 LSTM 循环神经网络进行时间序列预测 国际航空乘客问题的回归问题 这个文件是一个CSV格式的数据集&#xff0c;它包含了从1949年1月到1960年12月的每个月的国际航空乘客的总数&#xff08;以千为单位&#xff09;。第一行是列名&#xff0c;分别是&…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10(C++)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK修改图像像素格式Mono8或者Mono10&#xff08;C&#xff09; Baumer工业相机Baumer工业相机的图像像素格式的技术背景CameraExplorer如何查看修改相机图像像素格式信息在NEOAPI SDK里通过函数修改图像像素格式修改像素格式测试演示…

二刷Laravel 教程(用户注册)总结Ⅳ

一、显示用户信息 1&#xff09;resource Route::resource(users, UsersController); 相当于下面这7个路由 我们先用 Artisan 命令查看目前应用的路由&#xff1a; php artisan route:list 2&#xff09; compact 方法 //我们将用户对象 $user 通过 compact 方法转化为一个关联…

thinkphp6入门(15)-- 模型动态构建查询条件

背景 我使用thinkphp6的模型写数据库查询&#xff0c;有多个where条件&#xff0c;但是不确定是否需要添加某个where条件&#xff0c;怎么才能动态得生成查询 链式查询 在ThinkPHP 6中&#xff0c;可以使用链式查询方法来动态地构建查询条件。可以根据参数的值来决定是否添加…

数仓工具—Hive进阶之StorageHandler(23)

Storage Handler 引入Storage Handler,Hive用户使用SQL的方式读写外部数据源, 例如ElasticSearch、 Kafka、HBase等数据源的查询对非专业开发是有一定门槛的,借助Storage Handler,他们有了一种方便快捷的手段查询数据,Storage Handler作为Hive的存储插件,我们需要的时候直…

使用 Maven 的 dependencyManagement 管理项目依赖项

使用 Maven 的 dependencyManagement 管理项目依赖项 介绍 在开发 Java 项目时&#xff0c;管理和协调依赖项的版本号是一项重要而繁琐的任务。 而 Maven 提供了 <dependencyManagement> 元素&#xff0c;用于定义项目中所有依赖项的版本。它允许您指定项目中每个依赖…

xcode 14.3升级,缺少libarclite_iphoneos.a 文件

ld: file not found: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a clang: error: linker command failed with exit code 1 (use -v to see invocation) 去提示的这个目录下 或者用终端 open /Appli…

Simply主题 简约风格的Emlog博客模板 响应式布局

主题介绍 Simply是一款简约风格的Emlog博客模板&#xff0c;响应式布局、界面简单大方&#xff0c;实用性强&#xff01; 支持夜间模式&#xff0c;采用localStorage存储配置。IOS系统下支持随系统自动切换浅/深色模式。 文章页支持显示文章字数及阅读时间。 支持http/https …

vue实现代码编辑器,无坑使用CodeMirror

vue实现代码编辑器,无坑使用CodeMirror vue实现代码编辑器,使用codemirror5 坑&#xff1a;本打算cv一下网上的&#xff0c;结果发现网上的博客教程都是错的&#xff0c;而且博客已经是几年前的了&#xff0c;我重新看了github上的&#xff0c;发现安装的命令都已经不一样了。我…

听GPT 讲Rust源代码--compiler(19)

File: rust/compiler/rustc_target/src/spec/mips_unknown_linux_gnu.rs 该文件&#xff08;rust/compiler/rustc_target/src/spec/mips_unknown_linux_gnu.rs&#xff09;是Rust编译器针对MIPS架构上的Linux系统的目标描述文件。它的作用是定义了在这个目标上编译时的一些配置…

贯穿设计模式-享元模式思考

写享元模式的时候&#xff0c;会想使用ConcurrentHashMap来保证并发&#xff0c;没有使用双重锁会不会有问题&#xff1f;但是在synchronize代码块里面需要尽量避免throw异常&#xff0c;希望有经验的同学能够给出解答&#xff1f; 1月6号补充&#xff1a;没有使用双重锁会有问…

滑动窗口协议仿真(2024)

1.题目描述 滑动窗口协议以基于分组的数据传输协议为特征&#xff0c;该协议适用于在数据链路层以及传输层中对按 顺序传送分组的可靠性要求较高的环境。在长管道传输过程&#xff08;特别是无线环境&#xff09;中&#xff0c;相应的滑动窗口 协议可实现高效的重传恢复。附录 …

编程笔记 html5cssjs 019 HTML实体

编程笔记 html5&css&js 019 HTML实体 一、HTML 字符实体二、HTML 符号实体小结 在HTML文档中&#xff0c;用一些标记表示特定的格式&#xff0c;那我们想使用这些标记字符本身时就出了问题&#xff0c;直接使用时&#xff0c;会被浏览器解析为标记的&#xff0c;要想显…

UnityVR入门之六 如何让3DUI层级在场景模型之上

一、问题来源 根据 UnityVR入门之五 射线检测交互-CSDN博客 这一章节我们了解到VR要与UI交互需要将Canvas设置为World Space属性&#xff0c;然后使用碰撞盒的方式进行射线交互。 正常我们ui是始终叠加在3d场景之上的&#xff0c;如此设置当ui与场景模型相交就会遮挡穿模 二、解…

Java爬虫获取省市区镇村5级行政区划

公司有个项目需要五级行政区划&#xff0c;没有现成的数据&#xff0c;写了一段代码&#xff0c;从gj统计j获取的数据。记录一下。 1.引入maven解析html <!-- jsoup --> <dependency><groupId>org.jsoup</groupId><artifactId>jsoup</artifa…

Liunx JBK、Python安装和SSH免密登陆

一. JBK的安装 https://www.cnblogs.com/javabg/p/10332993.html 1.查找java相关的列表&#xff1a; yum -y list java* 或 yum search jdk 2.安装JBK&#xff1a; yum install java-11-openjdk.x86_64 yum install java-11-openjdk-devel.x86_64 3.完成安装后验…

Spring+Vue实战项目环境准备跑通程序

SpringVue 源项目 后端&#xff1a; 首先在GitHub上克隆项目到本地&#xff08;zip包下载/sourcetree拉取/gitbash克隆&#xff09;。 https://github.com/songboriceman/doubao_community_backend 然后下载Lombok安装到你的IDE&#xff08;eclipse&#xff09;。 https://p…

2022年多元统计分析期末试题

2023年多元统计分析期末试题 1.试论述系统聚类、动态聚类和有序聚类的异同之处。 2、设 X {X} X~ N 3 {N_3} N3​(μ&#xff0c;Σ)&#xff0c;其中 X {X} X ~ ( X 1 {X_1} X1​, X 2 {X_2} X2​, X 3 {X_3} X3​)&#xff0c;μ (1,-2,3)‘&#xff0c;Σ [ 1 1 1 1 3 2…