【问题标题】:how to count duplicate elements in array in javajava如何计算数组中的重复元素
【发布时间】:2020-02-23 01:06:34
【问题描述】:

我有一个整数数组,例如 = 3,1,2,3,1 ;我只想计算这个数组有多少重复项。例如,这个数组现在有 4 个重复项。输入是数组,输出是重复元素的数量。 有什么方法或类吗?你能帮我实现我自己的吗? 注意:我不是在寻找指定元素的出现次数。我只想知道这个数组有多少重复项。例如,我说提到的数组有 4 个重复项。其中2个是“3”,其中2个是“1”!

【问题讨论】:

  • @GovindaSakare 不,不是。我不想计算每个元素重复多少次并打印它。我只需要所有元素的重复。例如,在帖子中我说我们有 4 个重复项。其中 2 个是“3”,其中 2 个是“1”
  • 输出应该是什么?
  • @GovindaSakare 一个整数。

标签: java


【解决方案1】:

一张地图可以用来存储数字和它们出现的次数:

Map<Integer,Integer> map = new HashMap<>();
for(int i: numbers) { //suppose you have the numbers in 'numbers' array
   if(map.containsKey(i) { //this number is in the map already
      map.put(i, map.get(i)+1);
   } else { //we didnt see this number before
      map.put(i, 1);
   }
}

//now we loop the map to sum the repeating numbers
int sum = 0;
for(int amount: map.values()) {
   if(amount > 1) sum += amount;
}

这种方法的一个优点是您可以准确地知道数组中每个数字的数量。您稍后可能需要该信息。

【讨论】:

  • 您好,感谢您的帮助。但我不是在寻找所有元素的出现次数。我只想知道一个数组是否有重复值,它有多少重复值。我也编辑了第一篇文章
  • @Semiron 这就是这样做的。重复元素的总量将在 sum 变量中。如果总和为 0,则表示该数组没有重复元素。
  • 你解决了我的问题,伙计。谢谢。 +1 票并接受答案
【解决方案2】:

最简单的方法是使用地图。数组被转换为整数流。 groupingBy 收集器使用整数作为映射的键。 counting 收集器计算这些整数的数量或出现次数。


    int[] nums = { 1, 20, 2, 3, 1, 2, 3, 2, 221, 20 };

    Map<Integer, Long> dups = Arrays.stream(nums)
            .boxed()
            .collect(Collectors.groupingBy(a -> a, Collectors.counting()));

要打印它,您可以为每个键和值执行此操作。

    dups.forEach((k,v)-> System.out.println(k + " -> " + v));

要计算重复的总数,请获取地图并将这些值相加 > 1。

    long sum = dups.values()
                  .stream()
                  .filter(a-> a > 1)
                  .count();

    System.out.println("There are " + sum + " duplicates in all");

【讨论】:

  • 简洁的解决方案。我做了同样的事情,只是使用了旧的 for 循环。
猜你喜欢
  • 2016-03-07
  • 2016-05-25
  • 2010-10-08
  • 1970-01-01
  • 2020-06-04
  • 1970-01-01
  • 1970-01-01
  • 2021-06-05
  • 1970-01-01
相关资源
最近更新 更多