是否有这样的Java数据结构可以存储唯一元素和任何重复元素的数量?
例如说我有给定的数据:“a”,“a”,“a”,“b”,“b”,“c”,“d” 我将每个数据元素添加到此数据结构中,并获得类似于:
的内容元素:计数 a:3 b:2 c:1 d:1
是否有一个java数据结构已经用来做类似的事情?
答案 0 :(得分:4)
是。番石榴有一个Multiset
类型你应该用它。
Multiset<String> bag = LinkedHashMultiset.create();
Collections.addAll(bag, "a", "a", "a", "b", "b", "c", "d");
for (Multiset.Entry<String> entry : bag.entrySet()) {
System.out.println(entry.getElement() + " : " + entry.getCount());
}
根据您想要的迭代顺序选择正确的Multiset
实现:
LinkedHashMultiset
(如上例所示)。TreeMultiset
。HashMultiset
。显然,这些映射与您为选择Map
实施所做的相同决策。
答案 1 :(得分:1)
您可以使用HashMap<String, Integer>
来执行您想要的操作。
你可以像这样使用它:
public class Test {
public static void main(String[] args) {
String[] data = new String[]{"a", "a", "a", "b", "b", "c", "d"};
Map<String, Integer> map = new HashMap<String, Integer>();
for(String d : data) {
Integer value = map.get(d);
if(value == null) {
map.put(d, 1);
}
else {
map.put(d, value + 1);
}
}
System.out.println(map);
}
}
然后打印出这样的东西:
{d=1, b=2, c=1, a=3}