首页 > 其他分享 >字符串的类区别、自动扩容、深浅拷贝

字符串的类区别、自动扩容、深浅拷贝

时间:2024-07-02 19:01:45浏览次数:3  
标签:里面 string 对象 深浅 数组 字符串 拷贝 strngBuilder

1、string stringBuffer strngBuilder 区别

可变性:string 中的vlaue值是final修饰的,是一个不可变的类,每一次修改string 的值的时候,都会产生一个新的对象。而stringBuffer strngBuilder 是一个可变类。字符串的变更不会产生新的对象。

线程安全性:string是一个不可变的类,所以它是线程安全的,stringbuffer也是安全的,因为他的每一个操作方法里面都有一个 synchronized一个同步关键字。stringbuilder不是线程安全的,所以在多线程环境下对字符串进行操作,应该使用stringbuffer。

性能:string是性能最低的。因为不可变,再做字符串拼接或者修改的时候,我们需要重新创建新的对象,以及分配内存。其次 stringbuffer 比 strngBuilder 性能更高。因为可变性字符串可以直接被修改。最后性能最高的是 strngBuilder ,因为它加了同步锁,会对性能产生影响,

存储:string存储在字符串常量池里面。 stringbuffer strngBuilder 是存储在堆内存空间

2、ArrayList 自动扩容

它是一个数组结构的存储容器,默认长度数组长度是10个,当在构建arraylist 对象时候,指定初始长度,随着在程序里面不断往ArrayList 里面添加数据,当添加的数据达到10个时候,arraylist里面就没有足够的容量去存储后续数据,这是会会它触发自动扩容

流程:创建一个新的数组,长度是原来长度的1.5倍。

使用arrays.copyof方法把老数组里面的数据拷贝到新的数组里面

扩容完成后 把需要添加的元素加入到新的数组里面

3、深拷贝、浅拷贝

他俩是用来描述对象或者对象数组,这种引用数据类型的一个复制场景的。

浅拷贝就是只复制一个对象的指针,而不复制这个对象本身。意味着两个引用指针指向被复制对象的同一块内存地址,

深拷贝就是完全创建一个一模一样的新的对象,新的对象和老对象之间,不共享任何内存,意味着对新对象的修改不会印象老对象的值。

无论深浅拷贝,都需要去通过实现Cloneable接口,并实现clone() 方法,然后在clone() 方法里面去实现 浅拷贝 或者深拷贝

实现深拷贝方法:通过序列化方式:把一个对象先序列化一遍,返回再通过反序列化回来,就会得到一个完整的新的对象,或者在clone() 方法里面,重写克隆的逻辑,对克隆对象的内部引用变量再进行一次克隆。

标签:里面,string,对象,深浅,数组,字符串,拷贝,strngBuilder
From: https://blog.csdn.net/w12345ll/article/details/140096823

相关文章

  • 周下载量3000多万的npm包---nanoid(uuid的竞争对手),生产随机字符串,体积更小,可以自定义
    https://www.npmjs.com/package/nanoid体积更小,可以自定义字符集<scriptsetup>import{onMounted}from'vue'import{nanoid,customAlphabet}from'nanoid'onMounted(()=>{letid1=nanoid()console.log(id1)letcustomNanoid......
  • rust 字符串拼接
    提问rust字符串拼接方式回答format!("{}{}",s1,s2);fnmain(){lets1="Hello";lets2="World";//Usingformat!macroforconcatenationletresult=format!("{}{}",s1,s2);println!("......
  • 《C++ Primer》导学系列:第 13 章 - 拷贝控制
    13.1拷贝、赋值与析构函数拷贝控制是C++中类设计的重要组成部分,用于管理对象的复制、赋值和销毁过程。理解并正确实现拷贝控制函数(拷贝构造函数、拷贝赋值运算符和析构函数)对于编写健壮和高效的C++程序至关重要。13.1.1拷贝构造函数拷贝构造函数用于创建对象的副本。它的......
  • 使用Date获取一个年月日时分秒微秒的时间字符串
    ★目标使用Date获取一个年月日时分秒微秒的时间字符串例如202407021100000100★代码实现constcurrentDate=newDate();constyear=currentDate.getFullYear();constmonth=String(currentDate.getMonth()+1).padStart(2,'0');//月份从0开始,需要加1const......
  • 代码随想录算法训练营第九天|232.用栈实现队列、225.用队列实现栈、 20.有效的括号、1
    文章目录232.用栈实现队列思路--直接模拟225.用队列实现栈解法一、两个队列模拟解法二、一个队列模拟20.有效的括号栈模拟1047.删除字符串中的所有相邻重复项解法一、栈解法二、双指针232.用栈实现队列题目链接:232.用栈实现队列-力扣(LeetCode)题目描述:请你仅......
  • 【LeetCode】反转字符串中的单词
    目录一、题目二、解法完整代码一、题目给你一个字符串s,请你反转字符串中单词的顺序。单词是由非空格字符组成的字符串。s中使用至少一个空格将字符串中的单词分隔开。返回单词顺序颠倒且单词之间用单个空格连接的结果字符串。注意:输入字符串s中可能......
  • 代码随想录算法训练营Day9 | 字符串 151.翻转字符串单词 28.实现strStr() KMP算法介绍
    python中常用:        s[::-1]: 反转整个字符        s.strip():删除开头或结尾处的空白字符     s.split():字符拆分成单词 →list    “”.join(s):list→字符串   (持续更新…) 151.翻转字符串里的单词 题目: Leetcod......
  • 【算法探秘】无重复字符的最长子串:解锁字符串中的独特风景
    【算法探秘】无重复字符的最长子串:解锁字符串中的独特风景一、引言:在字符的海洋中航行二、技术概述:独步字符森林技术定义核心特性代码示例:初尝甜蜜果实三、技术细节:拨开迷雾,洞悉本质原理解析难点剖析四、实战应用:字节跳跃,解密信息应用场景案例展示五、优化与改进:精益......
  • Day8 翻转字符串里面的单词,右旋字符串
    翻转字符串里面的单词我觉得这道题是一道可以很好的帮助我们的理解再次关于快慢双指针,希望我们能够经过我们多次的锻炼来提高自己的水平!题目在知道题里面,我们要做的不仅仅是单纯的翻转字符我们还需要将这个空格整掉,但是在每一个单词与单词之间我们还要有一个空格,所以我们......
  • Day7 反转字符串,反转字符串II,替换数字
    反转字符串 #include<iostream>usingnamespacestd;#include<string>voidfanzhuan(string&s){ for(inti=0,j=s.size()-1;i<s.size()/2;i++,j--) { swap(s[i],s[j]); } cout<<s;}intmain(){ strings; cin>>s; ......