检查列表中的重复条目

Far*_*hti 5 java collections

可能重复:
Java:检测ArrayList中的重复项?

要检查List是否有重复的条目,我将其转换为HashSet并比较任何不匹配的大小.你们有更好的方法吗?

Mat*_*eid 5

如果在集合的开始处有重复项,则此代码可能会更早中断:

HashSet<Integer> hashSet = new HashSet<>();
for(Integer i : myList) {
  if(!hashSet.add(i)) return true;
}
Run Code Online (Sandbox Code Playgroud)

正如Pshemo指出的那样,该add方法返回一个bool元素,是否实际上已将元素添加到集合中,而不是已经存在于其中。

  • 在添加Java时,必须检查set是否已经具有该元素,因此您的算法将对其进行两次检查。更优化的版本可能是“针对(整数i:列表){if(!set.add(i))返回true;}返回false;” (3认同)
  • @qualtar真的吗?不知道,以为是O(n),因为“ HashSet(Collection c)”构造函数似乎在AbstractCollection上调用了“ addAll”。http://www.docjar.com/html/api/java/ util / AbstractCollection.java.html。还是我需要选择其他方法? (2认同)