0
4

2 に答える 2

2

各値の出現回数をカウントするMultisetfrom 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 に答える