2013-12-11 98 views
3

這是最好的選擇來存儲性能的基礎上字符串列表。字符串VS字符串列表VS Stringbuilder列表

哪一個能夠提供最佳性能。

謝謝。

+0

性能明智的陣列是好的。但是列表提供了陣列無法提供的高級功能。 –

+0

定義「性能」。空間,速度,可靠性?我們在談論多少條絃樂? – user949300

+0

您可以檢查此鏈接 http://stackoverflow.com/questions/13639712/what-efficient-java-collection-would-be-used-to-store-a-million-strings –

回答

5
ArrayList

是一個很好的通用List和通常會出執行ArrayLinkedList。這是在時間複雜度擊穿(V的類型,i是索引):

 Type | add(V) | remove(V) | get(i) | 
------------------------------------------- 
     Array | O(n) | O(n) | O(1) | 
    ArrayList | O(1) | O(n) | O(1) | 
LinkedList | O(1) | O(1) | O(n) | 

一般來說,你可以使用此規則:

陣:使用,如果你知道元素的確切數量並且不需要添加或移除元素。

列表:使用,如果你不知道元素的確切數量和需要添加或刪除元素。

StringBuilder完全不同。 StringBuilder是一個可變字符串。你可以把它想成List<Character>。從這個意義上說,這可能不是你所需要的,所以將其與List<String>String[]進行比較可能不是人爲的。

2

java 7之前的字符串文字列表將會消耗你的permgen區域,從而導致JVM崩潰。所以如果你有太多的字符串,最好去Stringbuilder。 Stringbuilder在內部使用char數組。但是,使用Stringbuilder來存儲String列表,您可能必須使用特殊字符進行分隔,然後使用split()來取回列表。

更好的選擇是去一個字符串數組。如前所述,即使Stringbuilder使用char數組。所以如果你確定你想存儲String列表,這將是不錯的選擇。但是,如果這是唯一的目標,我會說爲什麼不使用ArratList ...你不必擔心數組的大小。

+1

如何訪問StringBuilder中的單個字符串?與Array和List相比,StringBuilder是不同的數據結構。 – camickr

+0

那麼一種方法是將所有字符串附加特殊字符,並獲得列表,你可以做一些像sbuilder.toString()。split(SpChar)。你將得到String數組。 –

+0

所以現在你必須解析數據才能訪問它,然後你將數據存儲在兩個地方,一次在StringBuilder中,一次在Array中。從性能角度來看,我看起來效率不高。 – camickr

0
  • 字符串數組可用於指定數據大小時。 字符串數組 不可生長。
  • 收集類用於當您的數據是可增長。這意味着,如果您的數組大小將動態變化或運行時變化,那麼您可以使用該數組。
  • StringBuilder不用於存儲數據列表。它附加字符串數據,如字符串緩衝區。如果您 搜索字符串VS StringBuffer的字符串Vs的構建 之間的區別,你可以得到的想法
1

構建大型字符串時總是使用StringBuilder。雖然速度差異不明顯,但這是最有效的。

我也聽說過Java在字符串上使用加號運算符時內部使用了構建器。雖然我不確定,但這是不太可能的。

+1

Java編譯器會用'new StringBuilder()。append(first).append(second)...'construct(或'StringBuffer')替換連接字符串。當你使用字符串連接反編譯一個類時,你可以親眼看到它。 – Cebence

+0

@Cebence嗯,那麼它是如何決定是否使用緩衝區或構建器? – GGrec

+0

'StringBuffer?'意思也許就是那個,我不確定哪一個。它可能取決於編譯器,但它總是使用相同的。 – Cebence

1

String是一個不可變的類,它不能被改變。 StringBuilder是可以附加到的可變類,替換或刪除字符並最終轉換爲String

請注意,如果您使用Java 5或更新版本,則應使用StringBuilder而不是StringBuffer。從API文檔:

作爲釋放JDK 5的,這類已補充了由單個線程,StringBuilder設計用於的等效類。 StringBuilder類通常應優先於此類使用,因爲它支持所有相同的操作,但速度更快,因爲它不執行同步。

對於More