文
章
目
录
章
目
录
学习如何使用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方面的问题,请评论留言。