Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查找列表中元素的出现次数_Java_List - Fatal编程技术网

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

Java 查找列表中元素的出现次数,java,list,Java,List,是否有一种直接的方法来确定列表是否包含重复项? 某些第三方UTIL中的直接API方法? 如果列表包含重复的元素,那么列表中有多少重复的元素? 我们可以编写代码,但我想知道是否存在任何直接API?不,您必须自己编写。但是您可以使用不允许插入重复数据的对象,因为没有内置的方法来执行此操作。但是,您可以使用LinkedHashSet来解决这个问题。它不允许重复,因为它的行为类似于一个集合,但它保留了元素的顺序,因为它的行为类似于一个列表。您可以迭代列表中的所有元素并将它们添加到LinkedHashSe

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

不,您必须自己编写。但是您可以使用不允许插入重复数据的对象,因为没有内置的方法来执行此操作。但是,您可以使用LinkedHashSet来解决这个问题。它不允许重复,因为它的行为类似于一个集合,但它保留了元素的顺序,因为它的行为类似于一个列表。您可以迭代列表中的所有元素并将它们添加到LinkedHashSet,检查add方法是否返回true或false。

如果您想知道有多少重复项,您可以将列表保留为重复项,同时保留一个不包含重复项的集合。重复的数量就是列表的大小减去集合的大小。

您可以使用

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);
}

如果您想要一个API,可以使用的找到重复的API


只需将列表添加到集合中并使用该方法即可。

看起来您需要这样的内容:

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;
}
这将为您提供列表中元素的编号。或者,您可以创建一个列表而不是使用count,并将重复的元素添加到列表中,然后返回该列表

例如:

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++;
   }
}

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

这可能会有所帮助。您是否正在尝试查看是否有对同一对象的引用,或者容器中是否有一个类的多个实例?实际上,此列表是由字符串组成的。列表包含方法的名称。我想知道是否在类中重载了特定的方法。我通过思考得到所有的方法,并把它们列在一个列表中。现在传递我需要验证的methodName。但是如果这个列表包含多个,那么我需要维护一个计数器。我可以这样做,但我想知道是否有更好的方法,所以我问是否有任何直接的API。啊。。。嗯,我相信反射可以告诉你一个方法是否被重写。。。使用getAnnotations方法并对照Override java注释检查它们。这主意不错,但这是第三方jar/类,我们不确定它们是否使用注释进行重写。我想允许列表中存在重复项。它将有副本,但想知道是否有副本,然后有多少?然后你需要实现它,因为没有现有的API来做到这一点,但有很多例子说明了如何在互联网上做到这一点,比如说,你说没有是什么意思?事实上,有第三方UTIL可以计算允许它们的集合中的重复项。谢谢,但我想允许重复项。很好。但是复杂度是2,如果您想获得列表中所有重复项的数量,那么很容易修改。