java—如何有效地查找数组中的重复元素?我是说迭代次数很少

brgchamk  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(354)

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

e7arh2l6

e7arh2l61#

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

Character[] chars = {'A', 'A', 'B', 'B', 'B', 'C'};

如果你想的话 filter 某些元素和获取 count 其中:

Long countB = Arrays.stream(chars)
        .filter(ch -> ch.equals('B')).count();

System.out.println(countB); // 3

如果你想得到 distinct 元素:

Character[] distinct = Arrays.stream(chars)
        .distinct().toArray(Character[]::new);

System.out.println(Arrays.toString(distinct)); // [A, B, C]

或者你可以用 HashSet :

HashSet<Character> set = new HashSet<>(Arrays.asList(chars));

System.out.println(set); // [A, B, C]

如果你想的话 collect 副本Map:

Map<Character, Long> duplicates = Arrays.stream(chars)
        .collect(Collectors.groupingBy(ch -> ch, Collectors.counting()));

System.out.println(duplicates); // {A=2, B=3, C=1}
6yt4nkrj

6yt4nkrj2#

你可以使用 HashSet 因为集合不允许重复,所以只需在元素数组上循环并将它们插入到 HashSet 使用 add() 方法。如果 add() 方法返回 false 那么该元素已经存在于集合中,并且它就在那里供您复制。这样,您只需在数组上循环一次,时间和空间的复杂度就会降低 O(n) .

相关问题