質問する
4742 次
2 に答える
2
各値の出現回数をカウントするMultiset
from Guavaを使用できます。最も単純な実装はですが、保持する必要がある場合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");
}
于 2012-07-25T08:31:05.917 に答える
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)
が、これは単一要素の頻度を探している場合にのみ適しています。それ以外の場合は、一意のものだけをチェックするためのセットが必要になるため、最初のアプローチの方が適しています。
于 2012-07-25T03:15:54.097 に答える