2013-09-30 46 views
0

我想在Pair<String,int>中搜索特定的String元素。我正在使用簡單的equals方法來執行此操作。請給我建議任何其他有用的技術。 String列表至少有10000個元素。在java中對內搜索

for (String str1 : StringList) { 
    for (Pair<?, ?> pair : nodeList) { 
     if (pair.getFirst().equals(str1)) { 
      // Some code here...    
     } 
    } 
} 
+0

你的意思是你要搜索10000個字符串中的字符串? –

+0

找到對後要執行的操作是什麼? – eatSleepCode

+0

可能在這裏重複http://stackoverflow.com/questions/2392652/java-find-all-possible-pairs-in-an-array – Sitansu

回答

0

使用HashSet而不是列表。它將複雜性降低到O(n)而不是現在的O(n^2)。

+0

使用HashSet後,我們怎樣才能得到配對? – eatSleepCode

+0

一組實際上會有所幫助,但是需要一個自定義的equals和hashCode,所以它不像你的答案顯示的那樣微不足道。 – pcalcao

+0

@pcalcao看起來是他正在使用的字符串,他們已經有了一個合適的equals和hashCode。 – Kayaman

1

如果您想重複檢查您的StringList是否包含特定的String,那麼最好使用HashSet<String>代替。

使用HashSet.contains()方法檢查您的字符串是否存在 - 這樣,您將立即在O(1)時間內獲得返回值,而不必遍歷所有元素。

0

如果我正確理解你的問題,你想要搜索一個列表中的特定字符串。該特定的Pair第一個元素必須與您正在查找的字符串匹配,對嗎?

那麼,如果您的列表沒有以任何方式排序,那麼您的運氣不好。瀏覽所有元素並搜索它。

如果列表的順序(按照Pair的第一個元素的順序),那麼您可以使用二進制搜索以更快的速度執行它。

3

我想你應該使用HashMap這個。它包含key-> value之類的對,您可以使用containsKeycontainsValue方法輕鬆檢查兩者的存在。

1

對> 10000條記錄執行順序掃描並執行String.equals()操作將會很慢。考慮使用一個HashMap代替,其中關鍵是每對中的第一(串),值是第二(整數):

Map<String, Integer> map = //... get your map 

for (String str : stringList) { 
    Integer found = map.get(str); 
    if (found!=null) { 
     // Some code here... 
    } 
}