2010-08-05 158 views
7

我正在使用Java,我正在尋找在空間中優化並且速度很快的字符串集合(集合和列表)。我的字符串是固定的大小:3或5個字符長。Java中的快速字符串集合

如果有任何可以最適合我的收集庫,請告訴我。我正在考慮一些基於字典的集合。

謝謝。

+7

什麼語言/平臺? – 2010-08-05 19:13:57

+4

你有幾個字符串?成千上萬的?百萬?十億? – 2010-08-05 19:16:15

回答

0

假設你在談論C或C++,因爲我無法想象任何其他語言,有人會尋找一個字符串庫,我建議使用 Paul Hsieh

儘管我自己從來沒有用過它,因爲它在我的情況下不起作用,但我在2007年將其作爲基礎的概念適用於自己的使用。它有很好的文檔記錄,至少你可以學習一些關於字符串的重要內容,然後閱讀Paul的材料。

1

如果我想要速度,我會使用C++和STL以及固定爲8個字節的自定義字符串類。 8個字節很好地對齊並且是64位,因此可以在單個機器指令中進行比較。

使用STL,您可以選擇使用std :: set,std :: map,unordered_set,std :: list或任何其他STL兼容結構。

+0

你好,我正在尋找優化Java代碼。該應用程序使用大量的字符串集合,我的字符串是固定大小 – niraj 2010-08-06 18:48:37

+0

@niraj:你沒有在你的問題中這麼說。我會爲你編輯你的問題,但你需要說明你在問題中詢問的語言和平臺。 – 2010-08-06 20:30:50

3

'dictionary based collections'? HashMap是默認選擇。它和O(1)一樣快。 它與元素的大小沒有固定或沒有。

3

如果你的意思是一個字符串集合,我會去用Java的默認HashSet。如果你需要更快的東西(就查找時間而言),你可以使用Trie。嘗試非常快速的查找(O(字符串的長度)),而不考慮數據結構中字符串的數量,並且可以非常緊湊。

但是,請先用HashSet先測試您的代碼。有多達數百萬個小型字符串,我不認爲它會很慢。

2

一般來說,你不能真正擁有「快速收集」,因爲每個數據結構都有自己的優勢和劣勢。

如果你想快速添加和迭代,ArrayList是好的。如果您進行了大量刪除,則可能需要使用LinkedList。如果你想快速查找,HashSet是好的,等等。

如果你有併發訪問,還有其他潛在的更適合的數據結構。有時,結合多個數據結構也可能有所幫助。

總之,你需要告訴我們你要使用你的數據結構。