2009-09-16 78 views
0

好的。這是一個問題。這是我的收藏:{2,3,4,2,3,5}。假設現在是List。我想搜索這個集合的所有匹配'2'。我想索引相同。我知道ListArrays.binarySearch()中有indexOf()lastIndexOf()方法。但是,它們都返回一個指示搜索元素位置的元素。有沒有一種簡單而有效的方法來查找所有匹配?請注意,這個問題不限於基本類型。查找Java集合中的所有匹配

+0

P.S:謝謝大家的回覆。我認爲這一個做我想要的:http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html#select(java.util.Collection,org.apache.commons.collections .Predicate) – Jay 2009-09-16 08:24:51

+0

如果上面的鏈接被破壞,請在這裏查找select方法http://commons.apache.org/collections/apidocs/org/apache/commons/collections/CollectionUtils.html – Jay 2009-09-16 08:25:50

回答

5

除非對列表進行排序,否則無法使用binarySearch。如果它已排序,則所有匹配項都位於indexOf和lastIndexOf之間。

3

迭代收集並手動檢查每個元素。

+0

這真的。你可以去做一些簡化的方法,但是你最好的選擇就是創建一個數組,循環訪問你的集合,然後將匹配的結果添加到你創建的數組中,然後返回它。 – Eric 2009-09-16 07:48:14

3

如果你想要所有的匹配,最直接的方法是循環它。

簡單是最好的策略。

或者你有一些特定的原因沒有循環?

+0

我認爲這不是解決問題的最佳方法。迭代太多,處理器時間太多。 – Jay 2009-09-16 07:47:32

+2

但是,如果您不提前對收集進行排序,則二分法搜索也不會有太大幫助。如果你使用某種數據結構,比如二叉樹,同樣的問題會有一些不同的解決方案。收藏太籠統。所以你可能想根據你的需要選擇正確的數據結構。 – 2009-09-16 07:51:42

+0

有沒有第三方API有這種功能? Apache Commons? Google Collections? – Jay 2009-09-16 07:59:42

1

爲什麼你想找到索引?如果可能,請考慮使用列表以外的其他內容,例如允許重複或排序列表的哈希表,以便縮短搜索時間。否則,您可以獲取該整數的所有實例的唯一方法是使用for循環手動搜索。

1

使用LambdaJ,你將有一個'封閉像'系統來編寫你的案例。

相關問題