2012-07-25 46 views

回答

2

您可以使用Guava中的Multiset,它將計算每個值的出現次數。最簡單的實現是HashMultiset,但如果需要保留它,也可以使用不可變的實現,如ImmutableMultiset

它一樣簡單易用:

Multiset<Item> items = HashMultiset.create(list); 
System.out.println(items.count(someItem)); 
for (Multiset.Entry<Item> entry : items.entrySet()) { 
    System.out.println(entry.getElement() + " - " + entry.getCount() + " times"); 
} 
2

您有多個選項,您可以使用Map<Item, Integer>並使用映射的值來存儲頻率,這對於時間複雜度會很好,但對於空間複雜度不會太好。

for (Item i : list) 
{ 
    Integer f = map.get(i); 

    if (f == null) 
    map.put(i, 1); 
    else 
    map.put(i, ++f); 
} 

否則,你可以使用一些工具方法,像Collections.frequency(Collection<?> c, Object o)但是這將是一件好事只有當你正在尋找一個單一的元素的頻率,否則,你就需要一組檢查只是唯一身份,因此第一種方法是會更好。

相關問題