广告
返回顶部
首页 > 资讯 > 后端开发 > Python >解决StringBuffer和StringBuilder的扩容问题
  • 226
分享到

解决StringBuffer和StringBuilder的扩容问题

2024-04-02 19:04:59 226人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

StringBuffer和StringBuilder的扩容 以前对StringBuffer/StringBuilder只是初浅的了解,只是知道StringBuffer是线程安全的,S

StringBuffer和StringBuilder的扩容

以前对StringBuffer/StringBuilder只是初浅的了解,只是知道StringBuffer是线程安全的,Stringbuilder是非线程安全的。并且字符串长度是可变的。

具体是怎么变没有去深入了解,今天看了一下源码,恍然大悟

来看一下源码,在没有传参的情况下默认初始容量是16。

有参数的情况下,初始容量是16+字符串的长度,并且是用append()方法追加的字符。

到这里就有疑问那,那这个字符串的长度是多少呢。是它本身的长度还是16+它自身的长度,来接着往下看。一路追寻append()方法终于找到答案了。

注意,这个len居然是String自身的长度,现在明白了吧。其实平时咱们也在用str.length();方法就是没注意它的长度是怎么来的。

忽然又想到一个问题,那要是在追加字符串的时候长度比16大怎么办,我们看到有个ensureCapacityInternal()的方法,追进去看看,然后发现它是这么扩容的


int newCapacity = (value.length << 1) + 2;

增加为自身长度的一倍然后再加2;这个时候如果还是放不下,那就直接扩容到它需要的长度


newCapacity = minCapacity;

StringBuilder扩容规则

StringBuilder默认的创建的时候开辟的char数组的大小


StringBuilder() default 16
StringBuilder("Str") default Str.length()+16

StringBuilder sb扩容的规则:

当调用sb.append()的时候每次都会对当前容量进行判断

StringBuilder.append

确定下需要的最小的容量(已经存储的数据长度+准备存储的数据的长度)是否大于存储的char数组的长度,如果大于就在newCapacity扩容

ensureCapacityInternal

判断扩容当前char数组长度的2倍+2的长度是否满足扩容需求,不满足设置为存储的数据长度+准备存储的数据的长度,判断append扩容是否超过MAX_ARRAY_SIZE(Integer.MAX_VALUE - 8),如果是抛出异常OutOfMemoryError

newCapacity

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: 解决StringBuffer和StringBuilder的扩容问题

本文链接: https://www.lsjlt.com/news/130453.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 解决StringBuffer和StringBuilder的扩容问题
    StringBuffer和StringBuilder的扩容 以前对StringBuffer/StringBuilder只是初浅的了解,只是知道StringBuffer是线程安全的,S...
    99+
    2022-11-12
  • 如何解决StringBuffer和StringBuilder的扩容问题
    这篇文章主要讲解了“如何解决StringBuffer和StringBuilder的扩容问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决StringBuffer和StringBuil...
    99+
    2023-06-20
  • Redis主从复制问题和扩容问题的解决思路
    一、解决主从复制问题 当使用Redis作为存储引擎的时候,并且使用Redis读写分离,从机作为读的情况,从机宕机或者和主机断开连接都需要重新连接主机,重新连接主机都会触发全量的主从复制,这时候主机会生成内存...
    99+
    2022-06-04
    主从 思路 Redis
  • Shard-Jdbc数据库扩容的场景和问题的解决方法
    这篇文章主要介绍“Shard-Jdbc数据库扩容的场景和问题的解决方法”,在日常操作中,相信很多人在Shard-Jdbc数据库扩容的场景和问题的解决方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Shard...
    99+
    2023-06-02
  • oracle数据库表空间扩容的问题怎么解决
    本文小编为大家详细介绍“oracle数据库表空间扩容的问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“oracle数据库表空间扩容的问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1.查看表...
    99+
    2023-07-05
  • 详解Mysql数据库平滑扩容解决高并发和大数据量问题
    目录1 停机方案2 停写方案3 平滑扩容之双写方案(中小型数据)4 平滑扩容之2N方案大数据量问题解决4.1 扩容问题4.2 解决方案4.3 双主架构思想4.4 环境部署5 数据库秒...
    99+
    2022-11-13
  • laravel容器延迟加载及auth扩展问题怎么解决
    今天小编给大家分享一下laravel容器延迟加载及auth扩展问题怎么解决的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。发现...
    99+
    2023-07-04
  • 怎么解决数据库分库分表无限扩容问题
    这篇文章主要讲解了“怎么解决数据库分库分表无限扩容问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决数据库分库分表无限扩容问题”吧!单体应用每个创业...
    99+
    2022-10-19
  • 解决docker容器无法访问的问题
    服务器上的docker容器都无法访问了,而且裸机部署的应用则没有任务问题。 docker容器重启多次均无法访问!!! docker服务重启也无济于事!!! 服务器网卡重启也不行!!! 网上搜了一堆方法...
    99+
    2023-09-14
    docker 服务器 运维
  • 怎么解决IE7和IE8兼容性问题
    怎么解决IE7和IE8兼容性问题,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。IE8会是福音还是又一个光环据称全面兼容标准,今天向大家介绍如何...
    99+
    2022-10-19
  • 怎样解决IE6、IE7和IE8的CSS兼容问题
    本篇文章为大家展示了怎样解决IE6、IE7和IE8的CSS兼容问题,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。和大家重点讨论一下CSS兼容:解决IE6、IE7和I...
    99+
    2022-10-19
  • Apache 容器中的 PHP API:问题和解决方案
    Apache 容器中的 PHP API:问题和解决方案 近年来,随着云计算和容器技术的普及,越来越多的开发者开始将自己的应用部署到容器中,以便更方便地进行开发和部署。而在容器中,使用 PHP 语言开发的应用也越来越普遍。在这样的环境下,我们...
    99+
    2023-06-15
    api 容器 apache
  • 在Go语言中如何解决并发任务的动态扩容问题?
    在Go语言中如何解决并发任务的动态扩容问题?当需要处理大量并发任务时,我们可能需要动态调整并发goroutine的数量以实现任务的高效处理。在Go语言中,可以使用goroutine和channel来实现并发编程,通过调整goroutine的...
    99+
    2023-10-22
    Go语言 动态扩容 并发任务
  • vscode 左侧扩展活动栏内容消失的问题及解决方法
    vscode左侧活动栏默认会有 一些内容,今天一不小心,不知道怎么的,将部分内容搞没了(是的,我也不知道怎么搞的 就没了) 如下图:搜索 和 源代码管理都不见了 恢复办法 1. 恢...
    99+
    2022-11-12
  • Mysql怎么数据库平滑扩容解决高并发和大数据量问题
    本篇内容主要讲解“Mysql怎么数据库平滑扩容解决高并发和大数据量问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Mysql怎么数据库平滑扩容解决高并发和大数据量问题”吧!1 停机方案发布公告...
    99+
    2023-06-30
  • Android setButtonDrawable()的兼容问题解决办法
    Android  setButtonDrawable()的兼容问题解决办法 setButtonDrawable()的兼容问题 API16实现 public v...
    99+
    2022-06-06
    兼容 Android
  • 如何解决Vue兼容ie9的问题
    这篇文章给大家分享的是有关如何解决Vue兼容ie9的问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言背景情况vue - 2.5.11vue-cli 使用模板 webpack...
    99+
    2022-10-19
  • 如何解决cssdisplaynlineblock的兼容性问题
    今天就跟大家聊聊有关如何解决cssdisplaynlineblock的兼容性问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。 ...
    99+
    2022-10-19
  • 解决lombok父类和子类builder不兼容的问题
    目录遇到的问题排查和解决结尾遇到的问题 在写代码时,有时因为需要定义一些重复的参数,为了复用之前传参的DTO,会对原有的类进行继承,从而达到避免重复代码的效果。 但是,当父类中使用了...
    99+
    2022-11-13
  • CSS如何解决与IE7和IE8的兼容性问题
    这篇文章主要讲解了“CSS如何解决与IE7和IE8的兼容性问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“CSS如何解决与IE7和IE8的兼容性问题”吧!...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作