我目前正在使用大量字符串(+2000)的java應用程序中工作。我想將這些字符串存儲在適當的結構中,所以當我想存儲一個新的字符串時,如果同一個字符串已經存在,我可以快速檢查。如果結構中沒有相同的字符串,我繼續存儲新的(基本上不用重複字符串存儲)。。只有存儲不同字符串的高效方法/結構
//PSEUDOCODE
private ?????? myCollectionOfStrings;
public void store_If_Not_Exist(String aNewString){
if (!exist_in_Collection(aNewString)){ //this must be fast.
store_in_Collection(aNewString);
}
}
我目前用天真的實現,但我知道這是真的效率低下:
private List<String> myCollectionOfStrings;
public void store_If_Not_Exist(String aNewString){
boolean existInCollection = false;
for (String s: myCollectionOfStrings){
if (s.equals(aNewString)){
existInCollection = true;
break;
}
}
if(!existInCollection)
store_in_Collection(aNewString);
}
的問題是:什麼樣的方法/結構/算法可我用來存儲字符串,所以檢查存在可以快速實現?也許一個Trie樹,或者一個HashMap ???。謝謝!
使用'Set'。但是通過散列碼查找的任何東西都是相對有效的。 2000年並不是那麼大。當然,我認爲你正在尋找一個直接匹配,而不是詞幹,複數等等。實際上,使用'Set'將允許繞過檢查,因爲只有一個實例存在。 –
KevinO
您正在尋找一個Set數據結構。在Java中,'HashSet'。它有一個元素的O(1)查找時間。 –
使用'HashSet',非常快速 – Bohemian