java删除数组重复元素
时间: 2025-05-03 10:43:22 浏览: 30
在 Java 中删除数组中的重复元素通常需要借助额外的数据结构,例如 `Set` 或者通过手动遍历、比较的方式实现。以下是几种常见方法:
### 方法一:使用 HashSet 去重
```java
import java.util.HashSet;
public class RemoveDuplicates {
public static int[] removeDuplicates(int[] array) {
if (array == null || array.length == 0)
return array;
// 使用HashSet存储唯一值
HashSet<Integer> set = new HashSet<>();
for (int num : array) {
set.add(num);
}
// 将结果转回数组
int[] result = new int[set.size()];
int index = 0;
for (Integer num : set) {
result[index++] = num;
}
return result;
}
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5, 2, 6};
int[] uniqueArr = removeDuplicates(arr);
System.out.print("去重后的数组: ");
for (int i : uniqueArr) {
System.out.print(i + " ");
}
}
}
```
**优点**:简单高效;
**缺点**:可能会改变原数组的顺序。
---
### 方法二:双层循环手动比对并移除重复项
如果想保持原有顺序,则可以采用这种方法。
```java
public class ManualRemoveDuplicates {
public static int[] removeDuplicates(int[] array) {
if (array == null || array.length <= 1)
return array;
int n = array.length;
boolean isDuplicate;
int newSize = 0;
// 创建一个新的临时数组用于存放无重复的结果
int[] tempArray = new int[n];
for (int i = 0; i < n; i++) {
isDuplicate = false;
// 检查当前数字是否已经存在于tempArray中
for (int j = 0; j < newSize; j++) {
if (array[i] == tempArray[j]) {
isDuplicate = true;
break;
}
}
// 如果不是重复元素就加入到新数组中
if (!isDuplicate) {
tempArray[newSize++] = array[i];
}
}
// 截取有效长度部分返回
return Arrays.copyOf(tempArray, newSize);
}
public static void main(String[] args) {
int[] arr = {7, 8, 9, 10, 7, 11};
int[] noDupes = removeDuplicates(arr);
System.out.println("原始数组:");
System.out.println(Arrays.toString(arr));
System.out.println("去除重复后的数组:");
System.out.println(Arrays.toString(noDupes));
}
}
```
**优点**: 不依赖外部库;
**缺点**: 效率较低(O(n^2)),只适合小规模数据处理场景。
---
### 方法三:先排序再逐一检查相邻位置是否存在相同的数
这种方式适用于当不需要保留原来顺序的情况,并且效率较高(O(nlogn))。
```java
import java.util.Arrays;
public class SortThenRemoveDups {
public static int[] removeDuplicates(int[] array){
if(array==null||array.length<=1)return array;
Arrays.sort(array); // 先将数组从小到大排列
int slow=0,fst=1;
while(fst<array.length){
if(array[fst]!=array[slow]){
slow++;
array[slow]=array[fst];
}
fst++;
}
return Arrays.copyOfRange(array,0,slow+1);
}
public static void main(String []args){
int[] nums={4,3,2,4,5,2};
int[] res=removeDuplicates(nums);
System.out.println(Arrays.toString(res)); //[2, 3, 4, 5]
}
}
```
以上三种方法各有优劣,在实际应用时可根据需求选择合适的一种方式进行操作!
阅读全文
相关推荐















