⛳ StringBuffer and StringBuilder 处理字符串

news2024/11/22 6:18:28

目录

  • ⛳ StringBuffer and StringBuilder 处理字符串
    • 🎨 一,简介
    • 🏭 二,常用方法
    • 🚜 三 ,`StringBugger`
    • 🐾 四,`StringBuilder`
    • ⭐ 五,`StringBuffer`和`StringBuilder`面试

⛳ StringBuffer and StringBuilder 处理字符串

当我们处理字符序列是,经常需要进行字符串的拼接,替换,插入和删除等操作。Java提供了两个用于处理可变字符串的类:StringBufferStringBuilder。他们都是属于java.lang包,提供了一系列方法来修改字符串内容。

StringBufferStringBuilder的作用是相同的,都可以用于构建和修改字符串。他们的区别在于线程安全性和性能。

🎨 一,简介

  • append()insert()时,如果原来的value数组长度不够,可扩容。

    • 扩容原理:
        /**
         * For positive values of {@code minimumCapacity}, this method
         * behaves like {@code ensureCapacity}, however it is never
         * synchronized.
         * If {@code minimumCapacity} is non positive due to numeric
         * overflow, this method throws {@code OutOfMemoryError}.
         */
        private void ensureCapacityInternal(int minimumCapacity) {
            // overflow-conscious code
            if (minimumCapacity - value.length > 0) {
                value = Arrays.copyOf(value,
                        newCapacity(minimumCapacity));
            }
        }
    
  • StringBufferStringBuilder中的方法支持方法链操作

    • 方法链原理:

          @Override
          public StringBuilder append(String str) {
              super.append(str);
              return this;
          }
      // return this 返回对象本身
      

🏭 二,常用方法

StringBufferStringBuilder中的方法都是类似的。

在这里插入图片描述

  • StringBuffer append(xxx): 提供了很多的append()重载方法,用于进行字符串拼接。
  • StringBuffer delete(int start, int end):删除指定位置的内容。
  • StringBuffer replace(int start, int end, String str):把[start,end)位置替换成为str。
  • StringBuffer insert(int offset, xxx):在指定位置插入xxx。
  • StringBuffer reverse():把当前字符串序列逆转 。
  • public int indexOf(String str):返回指定字符串出现的索引。
  • public String substring(int start, int end):用于从字符串中提取子字符串的方法。它返回原始字符串中指定位置范围内的子字符串。
  • public int length():返回字符串的长度。
  • public char charAt(int n):返回指定索引的字符。
  • public void setCharAt(int n, char ch):设置指定索引处的字符。

🚜 三 ,StringBugger

StringBuffer是线程安全的,适合在多线程环境下使用。由于它的方法是同步的,保证了多个线程同时访问时的数据安全。然而,同步操作会带来一定的性能损失。因此,在单线程环境下,使用StringBuilder性能更好。

StringBuffer sb = new StringBuffer("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.delete(3, 6);
sb.replace(6, 11, "Java");
System.out.println(sb.toString());  // 输出:Helo, Java

🐾 四,StringBuilder

StringBuilder是非线程安全的,适合在单线程环境下使用,由于没有同步操作,他的性能比StringBuffer更高。因此,在单线程环境下,推荐使用StringBuilder

StringBuilder sb = new StringBuilder("Hello");
sb.append(" World");
sb.insert(5, ",");
sb.delete(3, 6);
sb.replace(6, 11, "Java");
System.out.println(sb.toString());  // 输出:Helo, Java

⭐ 五,StringBufferStringBuilder面试

  • StringBufferStringBuilder非常类似,均代表可变的字符序列,而且提供相关的方法也一样。

  • 面试题:对比StringStringBufferStringBuilder

    1. String(JDK 1.0):是不可变字符序列 final value[]

      在这里插入图片描述

    2. StringBuffer(JDK 1.0):可变的字符序列、效率低、线程安全

      image-20230805113731074

    3. StringBuilder(JDK 5.0):可变字符序列、效率高、线程不安全

      image-20230805113856875

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

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

相关文章

【李宏毅机器学习·学习笔记】Tips for Training: Adaptive Learning Rate

本节课主要介绍了Adaptive Learning Rate的基本思想和方法。通过使用Adaptive Learning Rate的策略,在训练深度神经网络时程序能实现在不同参数、不同iteration中,学习率不同。 本节课涉及到的算法或策略有:Adgrad、RMSProp、Adam、Learning …

Qt应用开发(基础篇)——时间微调输入框QDateTimeEdit、QDateEdit、QTimeEdit

一、前言 QAbstractSpinBox是全部微调输入框的父类,这是一种允许用户通过点击上下箭头按钮或输入数字来调整数值的图形用户界面控件,父类提供了当前值text、对齐方式align、只读readOnly等通用属性和方法。在上一篇数值微调输入框中有详细介绍。 QDateTi…

【雕爷学编程】Arduino动手做(186)---WeMos ESP32开发板4

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&#x…

PyTorch深度学习实战(9)——学习率优化

PyTorch深度学习实战(9)——学习率优化 0. 前言1. 学习率简介2. 梯度值、学习率和权重之间的相互作用3. 学习率优化实战3.1 学习率对缩放后的数据集的影响3.2 学习率对未缩放数据集的影响 小结系列链接 0. 前言 学习率( learning rate )是神经网络训练中…

(十二)大数据实战——hadoop集群之HDFS高可用自动故障转移

前言 本节内容主要介绍一下hadoop集群下实现HDFS高可用的自动故障转移,HDFS高可用的自动故障转移主要通过zookeeper实现故障的监控和主节点的切换。自动故障转移为 HDFS 部署增加了两个新组件:ZooKeeper 和 ZKFailoverController (ZKFC&…

【笔记】湖仓一体架构演进与发展

https://www.bilibili.com/video/BV1oF411F7rQ/?spm_id_from333.788.recommend_more_video.0&vd_sourcefa36a95b3c3fa4f32dd400f8cabddeaf

Linux中的firewall-cmd

2023年8月4日,周五上午 目录 打开端口关闭端口查看某个端口是否打开查看当前防火墙设置firewall-cmd中的服务在防火墙中什么是服务?为什么会有服务?打开或关闭服务查看某个服务是否打开firewall-cmd中的 zones查看所有可用的zones&#xff0…

elementui Cascader 级联选择使用心得

相信大家对于elementui并不陌生,作为适配Vue的优秀UI框架之一,一直被所有的开发者痛并快乐着。今天要记录的就是里边的主角之一Cascader。 首先先介绍一下Cascader ---> 当一个数据集合有清晰的层级结构时,可通过级联选择器逐级查看并选择…

OBS视频视频人物实时扣图方法(四种方式)

图片擦除一些杂乱图像 参考:https://www.bilibili.com/video/BV1va411G7be https://github.com/Sanster/lama-cleaner第一种:色度键选项 第二种:浏览器建立窗口选项 参考视频:https://www.bilibili.com/video/BV1WS4y1C7QY http…

Java8 list多属性去重

大家好,我是三叔,很高兴这期又和大家见面了,一个奋斗在互联网的打工人。 在 Java 开发中,我们经常会面临对 List 中的对象属性去重的需求。然而,当需要根据多个属性来进行去重时,情况会稍微复杂一些。本篇…

js实现原型链污染,沙箱绕过

一、沙箱绕过 1.概念 沙箱绕过"是指攻击者利用各种方法和技术来规避或绕过应用程序或系统中的沙箱(sandbox)。沙箱是一种安全机制,用于隔离和限制应用程序的执行环境,从而防止恶意代码对系统造成损害。它常被用于隔离不受信…

开放式耳机的音质不如入耳式耳机吗?开放式耳机的优缺点?

​开放式耳机的音质不一定不如入耳式耳机。音质取决于多种因素,包括耳机的设计、音频技术和材料质量等。因此,不能简单地将开放式耳机和入耳式耳机进行比较,并得出开放式耳机的音质不如入耳式的结论。不同的耳机类型都有各自的优势和劣势&…

常用HTML标签大全

🧑‍💻作者名称:DaenCode 🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。 😎人生感悟:尝尽人生百味,方知世间冷暖。 文章目录 一.HTML介绍二.HTML使用2.1.…

嵌入式开发学习(STC51-15-红外遥控)

内容 使用外部中断功能,使按下红外遥控器,将对应键值编码数据解码后通过数码管显示 红外遥控介绍 红外线简介 人的眼睛能看到的可见光按波长从长到短排列,依次为红、橙、黄、绿、青、蓝、紫; 其中红光的波长范围为 0.62&…

读发布!设计与部署稳定的分布式系统(第2版)笔记28_控制层上

1. 控制层囊括所有在后台运行的成功处理生产负载的软件和服务 1.1. 处理用户生产数据的那些软件,就是生产软件 1.2. 主要工作是管理其他软件的软件,就是控制层 1.3. 工具和问题之间存在着重叠和空白,并不是每个工具组合都能协同工作&#…

LeetCode 28题:找出字符串中第一个匹配项的下标

题目 给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。 示例 1: 输入:haystac…

2023 8-5

430. 扁平化多级双向链表 前序遍历(递归) 脖子左歪45度,多级链表变成了二叉树,输出先序即可。 前序遍历再将结果存放在双向链表中,通过将链表存入节点来改变原来的节点 /* // Definition for a Node. class Node { public:int val;Node* prev;Node* next;Node* child; }; *…

springboot+maven插件调用mybatis generator自动生成对应的mybatis.xml文件和java类

mybatis最繁琐的事就是sql语句和实体类,sql语句写在java文件里很难看,字段多的表一开始写感觉阻力很大,没有耐心,自动生成便成了最称心的做法。自动生成xml文件,dao接口,实体类,虽一直感觉不太优…

百度秋招攻略,百度网申笔试面试详解

百度秋招简介 作为行业巨头,百度向社会提供的岗位一直都是非常吃香的,每年也都有很多考生密切关注,百度发布的招聘广告,以尽可能的让自己进入这家企业工作,实现自己的人生价值。那么百度每年的秋招时间是多久&#xf…

【ChatGPT 指令大全】怎么利用ChatGPT写报告

目录 选定切入角度 报告开头 大纲生成 草稿撰写 研究报告 提出反对观点 报告总结 研究来源 总结 随着人工智能技术的快速发展,自然语言处理技术在各个领域的应用越来越广泛。其中,ChatGPT作为目前最先进的自然语言处理模型之一,其强…