查找列表中元素的出现次数

时间:2011-06-15 14:37:26

标签: java list

有没有直接的方法来确定列表是否包含重复项? 某些第三方工具中的直接API方法? 如果列表包含重复项,列表中存在多少这样的重复元素? 我们可以编写代码,但我想知道是否存在任何直接API?

6 个答案:

答案 0 :(得分:4)

您可以使用

计算出现次数
List<T> list =
Map<T, Integer> count = new HashMap<T,Integer>();
for(T t: list) {
   Integer i = count.get(t);
   if (i ==  null) i = 0;
   count.put(t, i + 1);
}

答案 1 :(得分:2)

不,你自己必须这样做。但是您可以使用不允许插入重复数据的对象(here

答案 2 :(得分:2)

看起来你想要这样的东西:

public int getNumOfElementInList(List<Object> myList, Object myElement){
   int count = 0;
   for(Object element: myList){
      if(element.equals(myElement)) //or use instanceof instead, depending
         count++;
   }
   return count;
}

这将为您提供列表中元素的编号。或者,您可以创建一个List而不是使用count,并将重复的元素添加到List中,然后返回。

如:

public List<DuplicateStats> getTotalNumOfElementInList(List<Object> myList){
   List<DuplicateStats> dups = new ArrayList<DuplicateStats>();
   int i;
   for(Object element: myList){
      if((i = dups.indexOf(element) != -1)
         dups.get(i).addOne();
      else
         List.add(new DuplicateStats(element));
   }
   return count;
}

public class DuplicateStats {
   private Object element;
   private int count;

   public DuplicateStats(Object o){
        element = o;
   }

   public boolean equals(String compare){
        return element.toString.equals(compare);
   }

   public void addOne(){
       count++;
   }
}

您可以在类DuplicateStats中添加getter,setter等,但它会为您跟踪重复项。

答案 3 :(得分:1)

如果你想知道有多少重复项,你可以保留列表中的重复项,以及一个没有重复项的集合。然后,重复数量就是列表的大小减去集合的大小。

答案 4 :(得分:1)

如果您需要API,可以找到GuavaMultiset重复项。

只需添加您的列表,然后使用count方法。

答案 5 :(得分:0)

没有内置方法可以做到这一点。但是,您可以使用LinkedHashSet来解决此问题。它不允许重复(因为它像一个集合),但它保留了一个元素的顺序(因为它就像一个列表)。您可以迭代列表中的所有元素并将它们添加到LinkedHashSet,检查add方法是返回true还是false。