可能重复:
How to count occurrence of an element in a List
Count occurences of word in ArrayList
假设我有一个List列出以下值
emp1, emp2, emp3, emp2, emp1, emp4, emp1
我需要获取字符串重复的次数,例如以下
emp1 - 3 times
emp2 - 2 times
emp3 - 1 times
emp4 - 1 times
我试图通过使用map来实现这一点。这是正确的方式还是有更好的方法?
答案 0 :(得分: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)
这样的设施方法,但只有当你在寻找单个元素的频率时才会这样做,否则你需要一个集来检查唯一元素,所以第一种方法会更好。
答案 1 :(得分:2)
您可以使用Multiset
中的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");
}