Java 如何有效地查找数组中的重复元素?我的意思是用很少的迭代次数

Java 如何有效地查找数组中的重复元素?我的意思是用很少的迭代次数,java,arrays,count,duplicates,Java,Arrays,Count,Duplicates,如何在缺少元素的数组中找到重复元素?如果迭代数组的次数不足,性能就会变慢。高效迭代数组的最佳方法是什么?或者我们可以使用任何其他Java集合对象来查找迭代次数较少或时间复杂度较低的重复项吗?您可以使用HashSet,因为集合不允许重复项,只需循环元素数组,并使用add()方法将它们插入HashSet。如果add()方法返回false,则该元素已存在于集合中,并存在于副本中。这样,您只需在阵列上循环一次,时间和空间复杂性为O(n)这取决于任务条件,第一种方法更快,最后一种方法更慢: Charact

如何在缺少元素的数组中找到重复元素?如果迭代数组的次数不足,性能就会变慢。高效迭代数组的最佳方法是什么?或者我们可以使用任何其他Java集合对象来查找迭代次数较少或时间复杂度较低的重复项吗?

您可以使用
HashSet
,因为集合不允许重复项,只需循环元素数组,并使用
add()
方法将它们插入
HashSet
。如果
add()
方法返回
false
,则该元素已存在于集合中,并存在于副本中。这样,您只需在阵列上循环一次,时间和空间复杂性为
O(n)

这取决于任务条件,第一种方法更快,最后一种方法更慢:

Character[]chars={'A','A','B','B','C'};
  • 如果您要删除某些元素并获取它们:

    Long countB=Arrays.stream(字符)
    .filter(ch->ch.equals('B')).count();
    System.out.println(countB);//3.
    
  • 如果要获取元素数组,请执行以下操作:

    Character[]distinct=Arrays.stream(字符)
    .distinct().toArray(字符[]::新建);
    System.out.println(Arrays.toString(distinct));//[甲、乙、丙]
    
    或者您可以使用:

    HashSet=newhashset(Arrays.asList(chars));
    系统输出打印项次(设置);//[甲、乙、丙]
    
  • 如果要创建重复项的映射,请执行以下操作:

    Map duplicates=Arrays.stream(字符)
    .collect(Collectors.groupingBy(ch->ch,Collectors.counting());
    System.out.println(副本);//{A=2,B=3,C=1}
    

  • 谢谢你的回答。但是假设我们在一个数组中有100万个元素,我们同样需要迭代100万次。我不想这样做。这就是为什么我要求使用比这种方法更好的方法来降低时间复杂度。我不相信你能在不到O(n)的时间内找到重复项。我同意@tgdavies。其他替代解决方案会导致O(n^2)的时间复杂度,这也不是您想要的