在Java中,去重数组和集合的方法有多种,以下是一些常见的方法:
数组去重
使用Set集合
将数组元素添加到Set集合中,Set集合不允许重复元素,因此重复元素会被自动过滤掉。
```java
Set
int[] distinctArray = set.stream().mapToInt(Integer::intValue).toArray();
使用HashMap
遍历数组中的每个元素,将元素作为key存储到HashMap中,由于HashMap不允许重复的key,所以重复的元素会被自动过滤掉。
```java
Map
map = new HashMap<>(); for (int num : array) {
map.put(num, 1);
}
int[] distinctArray = map.keySet().stream().mapToInt(Integer::intValue).toArray();
使用Stream API
使用Java 8引入的Stream API,将数组转换为Stream,然后使用`distinct()`方法去重。
```java
int[] distinctArray = Arrays.stream(array).distinct().toArray();
使用双重循环
遍历数组中的每个元素,再嵌套一个循环,判断后面的元素是否与当前元素相同,如果相同则将后面的元素删除。
```java
int[] distinctArray = new int[array.length];
int j = 0;
for (int i = 0; i < array.length; i++) {
boolean isDuplicate = false;
for (int k = i + 1; k < array.length; k++) {
if (array[i] == array[k]) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
distinctArray[j++] = array[i];
}
}
使用Arrays.sort()方法
先对数组进行排序,然后遍历数组,判断相邻的元素是否相等,如果相等则将后面的元素删除。
```java
Arrays.sort(array);
int[] distinctArray = new int[array.length];
int j = 0;
for (int i = 0; i < array.length - 1; i++) {
if (array[i] != array[i + 1]) {
distinctArray[j++] = array[i];
}
}
distinctArray[j] = array[array.length - 1];
集合去重
使用HashSet
HashSet是一种无序不重复集合,在添加元素时会自动去重。
```java
Set
set = new HashSet<>(Arrays.asList(array)); int[] distinctArray = set.stream().mapToInt(Integer::intValue).toArray();
使用LinkedHashSet
LinkedHashSet是一种有序不重复集合,它会按照元素的插入顺序进行排序。
```java
Set
int[] distinctArray = set.stream().mapToInt(Integer::intValue).toArray();
使用ArrayList
ArrayList具有不允许重复元素的特性,可以将数组中的元素添加到ArrayList中,最后将ArrayList转换为数组。
```java
List
list = new ArrayList<>(Arrays.asList(array)); list.removeIf(x -> Collections.frequency(list, x) > 1);
int[] distinctArray = list.stream().mapToInt(Integer::intValue).toArray();
使用Iterator的remove方法
通过Iterator遍历集合,利用其remove方法删除重复元素。
```java
List
Iterator
while (iterator.hasNext()) {
Integer item = iterator.next();
if (Collections.frequency(list, item) > 1) {
iterator.remove();
}
}
int[] distinctArray = list.stream().mapToInt(Integer::intValue).toArray();
以上方法均可根据具体需求选择使用。需要注意的是,使用集合去重时,集合的大小和性能会受到数据量和数据特性的影响。如果需要保留原始数组的顺序,可以使用LinkedHashSet;如果对性能有较高要求,可以考虑使用HashSet。使用Stream API进行去重通常是最简洁和灵活的方式