Stringbuilder

StringBuilderStringBuffer

String的長度是固定不變的,你不能改變它的內容,任何對String的修改都將產生新的String對象。因此,如果你的代碼對字符串的操作頻繁的話,那麼對於系統來說就是一筆很大的開銷。所以在java 5.0推出了StringBuilder,這個類默認初始16個字符的長度,你也可以自行設置長度,如果字符的長度超出了可容納的長度,它可以自動增加長度。

大家都知道HashTable是線程安全的,而HashMap是線程不安全的,但是我們在單線程中經常使用HashMap,而不使用HashTable,因爲它新增了內容,勢必會花開銷去維護這新增的內容,因此在單線程中,它不僅沒佔優勢,想法,還處於弱勢。同理,我們的java在推出了stringbuilder之後又退出了stringbuffer,區別跟上面類似,Stringbuilder是線程不安全的,所以它在單線程的效率要比Stringbuffer要高,但在syncronized中最好還是使用線程安全的類。雖然這樣,但這倆個類比String類的效率仍舊是高的多,所以這兩個類是作爲string的取代類而存在的。

當然,如果你有興趣,你可以試一下,每個String添加1000條數據,每次開始前打印當前時間(system.currentTimeMillis()),然後結束再打印一下,從而查看這三者時間的差距,你就可以得出同樣的結論。

它的主要操作有appendinsert方法,可重載以接收任意類型的數據,append是添加到字符串的末尾,而insert是指定位置插入。

下面就是基本使用方法,Stringbuffer類似,他們只有線程安全不安全的區別,其餘的都是差不多的。

public class stringbuilder01 {

public static void main(String[] args) {

StringBuilder stringbuilder=new StringBuilder();

//StringBuilder.append(obj)實現將一個對象作爲字符存入,這裏面還可以是8中數據類型、string和stringbuilder對象

stringbuilder.append("123");

//stringbuilder.charAt(index)獲得位置在index索引的char字符值

stringbuilder.charAt(0);

//stringbuilder.indexOf("string")獲得某個字符串第一次出現的索引

stringbuilder.indexOf("12");

//最後一次出現的索引stringbuilder.lastIndexOf("string");

stringbuilder.lastIndexOf("12");

//stringbuilder.insert(index,T)可以在index的位置,插入8中基本數據類型或者char數組

stringbuilder.insert(0,"123");

//stringbuilder.delete(start, end)刪除某一段內容

//stringbuilder.replace(begin, end, String);將字符中begin開始到end的位置使用string替換

stringbuilder.replace(0, 1, "hello");

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章