String/StringBuffer/StringBuilder的执行效率以及区别
1.String、StringBuffer、StringBuilder的異同?
相同點:底層使用char[]進(jìn)行存儲
不同點:
String:不可變的字符序列
StringBuffer:可變的字符序列:線程安全的(可同步訪問),效率低;
StringBuilder:jdk5.0新增,與StringBuffer一樣是可變的字符序列,但線程不安全的,所以效率較高;
2.String、StringBuffer、StringBuilder三者的效率從高到低排列應(yīng)該是什么順序?
從高到低:StringBuilder > StringBuffer > String;
3.開發(fā)中建議 根據(jù)線程安全來選擇使用: StringBuffer(int capacity) / StringBuilder(int capacity);
- 源碼分析String、StringBuffer、StringBuilder底層存儲與預(yù)分配內(nèi)存
tips:
1.System.out.println(sb2.length()); // 3, StringBuffer底層會默認(rèn)給到16個數(shù)組位置,如果你創(chuàng)建了3個,則就代表StringBuffer底層分配給你3+16=19個可以存放數(shù)組的位置,但是我初始化只用到3個,那么數(shù)組長度就還是3。
比如:一個房間可以占滿100個人,但是只進(jìn)去了10個人,要問房間現(xiàn)在的容量是多少?那當(dāng)然是10,而不是100.
2.擴(kuò)容問題:如果要添加的數(shù)據(jù)底層數(shù)組盛不下了,就需要擴(kuò)容數(shù)組;
默認(rèn)情況下,擴(kuò)容為原來容量capacity的2倍+2,同時將原有數(shù)組中的元素復(fù)制到新的數(shù)組中。
eg:
StringBuffer sb = new StringBuffer();System.out.println(sb.length()); //0-
StringBuffer的常用方法/StringBuilder相同
注:涉及到start與end位置的,都是左閉右開[start,end)!!
增: StringBuffer append(xxx);
刪: StringBuffer delete(int start, int end): 刪除指定[start,end)位置的內(nèi)容;
改:public void setCharAt(int n ,char ch) / StringBuffer replace(int start, int end, String str):把[start, end)位置替換為str;
查:public char charAt(int n);
插: StringBuffer insert(int offset, xxx): 在指定位置插入xxx;
長度:public int length();增刪改查插可不需返回值,即直接調(diào)用append() / delete() / setCharAt() / charAt() / insert()方法。
------------------------------------------------------------------------------------------------常用------------------------------------------------------------
StringBuffer reverse() :對當(dāng)前字符序列進(jìn)行逆轉(zhuǎn)操作
public int indexOf(String str):
public String substring(int start, int end):返回[start,end)區(qū)間的子字符串,不是切割當(dāng)前字符串,所以得需要返回值。
== tips: substring()方法是純小寫!!==
- 對比String、StringBuffer、StringBuilder三者的效率
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的String/StringBuffer/StringBuilder的执行效率以及区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android中控件移动的实现
- 下一篇: 大棚骨架搭建好 科学施肥增收增产