1. 程式人生 > 實用技巧 >Java-StringBuffer、StringBuilder

Java-StringBuffer、StringBuilder

public class StringBufferTest {
    /**
     * String \ StringBuffer \StringBuilder三者異同
     * String:不可變的字元序列:底層使用char[]儲存
     * StringBuffer:可變的字元序列:執行緒安全的,效率偏低;底層使用char[]儲存
     * StringBuilder:可變的字元序列:執行緒不安全的,效率高;底層使用char[]儲存
     * <p>
     * <p>
     * <p>
     * 底層資料結構
     * 原始碼分析
     * String str=new String();//char [] value=new char[0]
     * String str=new String("abc");//char [] value=new char[]{'a','b','c'};
     * <p>
     * StringBuffer sb1=new StringBuffer();//char [] value=new char[16];//底層建立了一個長度為16的陣列
     * sb1.append('a');//value[0]='a';
     * sb1.append('b');//value[1]='b';
     * <p>
     * StringBuffer sb2=new StringBuffer("abc");//char []value=new char["abc".length+16]{'a','b','c'};
     * <p>
     * //問題一:System.out.println(sb2.length);//3
     * <p>
     * //問題二:陣列擴容(擴容問題):如果新增的資料,底層陣列盛不下了,那就需要擴容底層的陣列
     * 預設情況下,擴容為原來容量的2倍+2,同時將原來陣列中的元素複製到新的陣列中。
     * <p>
     * <p>
     * 儘量避免擴容,開發中建議使用StringBuffer(int capacity) 或 StringBuilder(int capacity)
     
*/ @Test public void test1() { //可變 StringBuffer stringBuffer = new StringBuffer("abc"); stringBuffer.setCharAt(0, 'm'); System.out.println(stringBuffer); } /** * StringBuffer常用方法 * StringBuffer append(xxx):提供了很多append()方法,用於進行字串拼接 * StringBuffer delete(int start, int end):刪除指定範圍的內容【start,end) * StringBuffer deleteCharAt(int index):刪除指定位置的字元 * 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 synchronized String substring(int start, int end):返回一個從start開始到end索引結束的左閉右開的子字串 * public int length() * public char charAt(int n) * public void setCharAt(int n,char ch) * * * 總結: * 增:append(XXX) * 刪:delete(int start, int end)\deleteCharAt(int index) * 改:replace(int start, int end, String str)\setCharAt(int n,char ch) * 查:charAt(int n) * 插入:insert(int offset, XXX) * 長度:length() * 遍歷: * * *
*/ @Test public void test2() { // StringBuffer sb1=new StringBuffer(32); // sb1.append(1); // sb1.append("hello"); // System.out.println(sb1); // // sb1.delete(0,3); // System.out.println(sb1); // // StringBuffer sb2=new StringBuffer("helloworld"); // sb2.deleteCharAt(1);
// System.out.println(sb2); // StringBuffer sb3=new StringBuffer("helloworld"); // sb3.replace(1,4,"test"); // System.out.println(sb3); // // StringBuffer sb4=new StringBuffer("abcd"); // sb4.insert(1,"123"); // System.out.println(sb4); // // StringBuffer s5=new StringBuffer("abcd"); // s5.reverse(); // System.out.println(s5); StringBuffer s6=new StringBuffer("abcdhello"); System.out.println(s6.indexOf("hello")); System.out.println(s6.substring(2, 5)); } }