Java 查找、计数和移除数组中的重复元素

培训教学 潘老师 7个月前 (09-22) 163 ℃ (0) 扫码查看

学习如何使用Java中的流(Streams)、集合框架中的Map和Set等技术来查找、计数和移除数组中的所有重复元素。

我们将使用以下整数值数组。对于其他数据类型,逻辑保持不变。

1.使用Stream和Map

Stream API提供了从任何集合或数组中处理元素的出色方式。我们可以创建一个Map,将所有不同的元素作为Map的键,它们在数组中出现的次数作为Map的值。

Map<Integer, Long> map = Arrays.stream(numArray)
        .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));  //{1=2, 2=1, 3=2, 4=1, 5=2}

我们也可以遍历数组元素,并创建一个类似的Map映射。

Map<Integer, Long> map = new HashMap<>();
for (int i : numArray) {
  if (map.containsKey(i)) { //该元素已经在map中
    map.put(i, map.get(i) + 1);
  } else { //找到一个新元素
    map.put(i, 1L);
  }
}

现在我们可以使用 Map 键和值来计算重复项,甚至可以将重复和唯一元素收集到一个新数组中。

long duplicateCount = map.keySet()
  .stream()
  .filter(k -> map.get(k) > 1)
  .collect(Collectors.counting());
System.out.println("重复元素计数 : " + duplicateCount);
Integer[] duplicateElementsArray = map.keySet()
  .stream()
  .filter(k -> map.get(k) > 1)
  .toArray(Integer[]::new);
System.out.println("数组中重复元素 : " + Arrays.toString(duplicateElementsArray)); 
Integer[] uniqueElementsArray = map.keySet() .stream() .filter(k -> map.get(k) == 1) .toArray(Integer[]::new); 
System.out.println("数组中唯一元素 : " + Arrays.toString(uniqueElementsArray)); 

程序输出:

重复元素计数 : 3 
数组中重复元素 : [1, 3, 5] 
数组中唯一元素 : [2, 4] 

2.使用流(Stream)和集合(Set)

Java中的Set类仅存储不同的元素。我们可以利用这个特性来查找数组中的不同元素,然后使用简单的添加和删除操作来找到唯一和重复的元素。

以下代码尝试将数组中的所有元素添加到HashSet中。对于已经存在于集合中的重复元素,add()操作会返回false。

Integer[] numArray = new Integer[]{1, 2, 3, 4, 5, 1, 3, 5};
Set<Integer> distinctElementsSet = new HashSet<>();
Integer[] duplicateElementsArray = Arrays.stream(numArray)
    .filter(e -> !distinctElementsSet.add(e))
    .toArray(Integer[]::new);
System.out.println("Duplicate elements in the array : " + Arrays.toString(duplicateElementsArray));  //1, 3, 5]
int duplicateCount = duplicateElementsArray.length;
System.out.println("Count of duplicate elements : " + duplicateCount);   //3

使用Java的Set类确实是一种有效的方法来查找数组中的唯一元素和重复元素。

distinctElementsSet.removeAll(Arrays.asList(duplicateElementsArray));
Integer[] uniqueElementsArray = distinctElementsSet.toArray(Integer[]::new);
System.out.println("Unique elements in the array : " + Arrays.toString(uniqueElementsArray));  //[2, 4]

3.结论

在这个简短的Java教程中,我们学习了两种不同的方法来查找和计算Java数组中的重复元素。我们还学会了将重复元素和唯一元素收集并打印到一个新数组中。如果您有任何关于这个主题或其他Java方面的问题,请评论留言。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9195.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】