给定一个可能包含重复项的列表(如下所示),我需要能够计算每个(关键字)数量的唯一元素。
List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();
list.add("M1");
list.add("M1");
list.add("M2");
list.add("M3");
set.addAll(list);
System.out.println(set.size());
如何从列表中获取每个唯一元素的计数? 这意味着我想知道列表(列表)中包含多少“M1”,多少“M2”等。
The result should be the following:
2 M1
1 M2
1 M3
答案 0 :(得分:5)
您正在寻找Map<String, Integer>
数据结构,而不是Set
像
这样的东西for(iterating over something){
Integer count =map.get(value);
if( count == null){
map.put(value, 1);
} else{
count++;
map.put(value, count);
}
}
Map是将值唯一映射到值
的数据结构答案 1 :(得分:2)
Set
无法帮助您,您需要一张地图:
List<String> list = new ArrayList<String>();
Set<String> set = new HashSet<String>();
list.add("M1");
list.add("M1");
list.add("M2");
list.add("M3");
// ...
Map<String, Integer> counts = new HashMap<String, Integer>();
for(String element: list) {
int currentCount;
if(counts.contains(element)) {
currentCount = counts.get(element) + 1;
} else {
currentCount = 1;
}
counts.put(element, currentCount);
}
// ...
for(String element: counts.keySet()) {
System.out.println("element: " + element + ", times appeared: " + counts.get(element));
}
答案 2 :(得分:2)
我认为你正在寻找这样的东西(我没有编译它,但它应该让你朝着正确的方向前进):
List<String> list = ArrayList<>();
Map<String, Integer> counts = new HashMap<>();
// Fill list with values....
for (String item:list) {
Integer count = counts.get(item);
if (count == null) {
// This is the first time we have seen item, so the count should be one.
count = 1;
} else {
// Increment the count by one.
count = count + 1;
}
counts.put(item, count);
}
// Print them all out.
for (Entry<String, Integer> entry : counts.entrySet()) {
System.out.println(entry.getValue() + " " + entry.getKey());
}
答案 3 :(得分:0)
表示你想知道List(列表)中包含多少“M1”,多少“M2”,而不是使用 set 界面,你可以使用 Map interface因为Map包含键,值对格式,即地图数据结构。
Map<key,Value>
答案 4 :(得分:0)
更简单的方法:使用Collections.frequency()
System.out.println("M2: "+Collections.frequency(list,"M2");
将输出
M2: 1