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