使用Java的内置Set类来计算列表中List值中的EACH(关键字)唯一元素

时间:2013-08-07 05:00:16

标签: java list 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");

set.addAll(list);
System.out.println(set.size());

如何从列表中获取每个唯一元素的计数? 这意味着我想知道列表(列表)中包含多少“M1”,多少“M2”等。

The result should be the following:
2 M1
1 M2
1 M3

5 个答案:

答案 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