1. 程式人生 > 其它 >StringBuffer&StringBuilder的一些常用方法

StringBuffer&StringBuilder的一些常用方法

/**
* 關於StringBuffer和StringBuilder的使用
*/
public class StringBufferBuilderTest {
/*
String、StringBuffer、StringBuilder三者的異同?
String:不可變的字元序列 底層使用char[]儲存
StringBuffer:可變的字元序列 執行緒安全的,效率偏低 底層使用char[]儲存
StringBuilder:可變的字元序列 JDK5.0新增 執行緒不安全,效率偏高 底層使用char[]儲存

原始碼分析:
String str = new String();//char[] value = new char[0];
String str1 = new String("abc");//char[] value = new char[]{'a','b','c'}

StringBuffer sb1 = new StringBuffer();//char[] value = new char[16];底層建立了一個長度為16的陣列
sb1.append('a');//value[0] = 'a';
sb1.append('b');//value[1] = 'b';

StringBuffer sb2 = new StringBuffer("abc");//char[] value = new char["abc".length + 16];

問題1:System.out.println(sb2.length());//3
問題2:擴容問題 如果要新增的資料底層陣列裝不下了,那就需要擴容底層的陣列
預設情況下擴容為原來容量的2倍+2,同時將原有陣列中的元素複製到新的陣列中。

指導意義:開發中建議大家使用StringBuffer(int capacity) 或 StringBuilder(int capacity)

*/
@Test
public void test(){
StringBuffer stringBuffer1 = new StringBuffer("abc");
stringBuffer1.setCharAt(0,'m');
System.out.println(stringBuffer1);
System.out.println(stringBuffer1.length());
}

/*
StringBuffer append(xxx):提供了很多的append()方法,用於進行字串拼接
StringBuffer delete(int start,int end):刪除指定位置的內容
StringBuffer replace(int start,int end,String str):把[start,end)位置替換為str
StringBuffer insert(int start,int end,String str):在指定位置插入xxx
StringBuffer reverse():把當前字串逆轉
當append和insert時,如果原來的value陣列長度不夠,可擴容。
如上這些方法支援方法鏈操作。
方法鏈的原理:
@Override
public StringBuilder append(String str){
super.append(str);
return this;//方法鏈的原理
}

此外,還定義瞭如下的方法:
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)

總結:
增:append(xx)
刪:delete()
改:setCharAt(),replace()
查:charAt()
插:insert()
長度:length()
遍歷:for + charAt()
*/
@Test
public void test1(){
StringBuffer stringBuffer = new StringBuffer("abc");
stringBuffer.append(1);
stringBuffer.append('1');

System.out.println(stringBuffer);
stringBuffer.delete(2,4);
System.out.println(stringBuffer);

}

}


對比String、StringBuffer、StringBuilder三者的效率:
從低到高:
String、StringBuffer、StringBuilder