Java:列表中的元素数

时间:2012-10-15 21:12:03

标签: java list

  

可能重复:
  How to count occurrence of an element in a List

我有一个像List<String> A={12, 12, 14, 16, 16}这样的列表。我怎样才能明确地找到元素的数量

12->2
14->1
16->2

使用countElements(A,"12")A.count("12")等功能?有图书馆或功能吗?

5 个答案:

答案 0 :(得分:4)

只需遍历每个并维护

Map<Integer, Integer> numberToFrequencyMap;

答案 1 :(得分:4)

如果您需要单独使用某些元素的频率,也可以使用方法Collections.frequency

答案 2 :(得分:2)

查看Apache Commons CollectionUtils#getCardinalityMap

它返回Map<Element, Integer>,其中包含列表中每个元素的频率。

List<String> list = {"12", "12", "14", "16", "16"};
Map<String, Integer> frequencyMapping = CollectionUtils.getCardinalityMap(list);

另外,如果您想获取特定元素的计数,则会有CollectionUtils#cardinality

答案 3 :(得分:1)

如果您可以使用第三方依赖项,Guava有一个名为Multiset的集合类型:

Multiset<String> multiset = HashMultiset.create(list);
multiset.count("foo"); // number of occurrences of foo
multiset.elementSet(); // returns the distinct strings in the multiset as a Set
multiset.entrySet(); // returns a Set<Multiset.Entry<String>> that you can 
 // iterate over to get the strings and their counts at the same time

(披露:我向Guava捐款。)

答案 4 :(得分:0)

重复您的号码,将计数保持在Map,如下所示:

    List<Integer> myNumbers= Arrays.asList(12, 12, 14, 16, 16);
    Map<Integer, Integer> countMap = new HashMap<Integer, Integer>();
    for(int i=0; i<myNumbers.size(); i++){
        Integer myNum = myNumbers.get(i);
        if(countMap.get(myNum)!= null){
             Integer currentCount = countMap.get(myNum);
             currentCount = currentCount.intValue()+1;
             countMap.put(myNum,currentCount);
        }else{
            countMap.put(myNum,1);
        }
    }

   Set<Integer> keys = countMap.keySet();
   for(Integer num: keys){
       System.out.println("Number "+num.intValue()+" count "+countMap.get(num).intValue());
   }