Java函数实现数组去重的方法是什么?
Java 语言中,数组去重是一种常见操作。我们可以使用多种方法来实现这一功能,包括使用 Set、Map 以及使用双重循环进行遍历。
1、使用 Set 进行数组去重
Set 是 Java 中的一种容器类型,可以用来存储不重复的元素。因此,我们可以将数组中的元素添加到 Set 中,然后再从 Set 中取出不重复的元素来构建新的数组。下面是具体实现方法:
public static int[] removeDuplicates(int[] nums) {
Set<Integer> set = new HashSet<Integer>();
for (int i = 0; i < nums.length; i++) {
set.add(nums[i]);
}
int[] result = new int[set.size()];
int i = 0;
for (Integer num : set) {
result[i++] = num;
}
return result;
}
在上面的代码中,我们先创建一个 HashSet 对象 set,并将数组元素添加到 set 中去。因为 Set 不接受重复的元素,所以重复的元素会自动被过滤掉。然后我们再遍历 set 集合中的每个元素,将其添加到新的数组 result 中,并最终返回 result。
2、使用 Map 进行数组去重
Map 是另一种 Java 中的容器类型,可以将键值对存储在一起。我们可以使用 Map 的 key 来存储数组中的元素,因为 Map 的 key 也不能重复。然后再将 Map 中所有的 key 取出来重新构建数组。下面是具体实现方法:
public static int[] removeDuplicates(int[] nums) {
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
for (int i = 0; i < nums.length; i++) {
map.put(nums[i], i);
}
int[] result = new int[map.size()];
int i = 0;
for (Integer key : map.keySet()) {
result[i++] = key;
}
return result;
}
在上面的代码中,我们同样使用一个 Map 对象 map,并将数组中的元素作为 map 的 key 存储起来。因为 Map 的 key 不能重复,所以重复的元素会被覆盖。然后我们再遍历 map 中所有的 key,将其添加到新的数组 result 中,并最终返回 result。
3、使用双重循环进行数组去重
这种方法是最朴素的方法,它的思路是使用两层循环遍历数组元素,如果发现重复的元素就将其删除,最后将剩下的元素拷贝到新的数组中。具体实现方法如下:
public static int[] removeDuplicates(int[] nums) {
int len = nums.length;
for (int i = 0; i < len; i++) {
for (int j = i + 1; j < len; j++) {
if (nums[i] == nums[j]) {
nums[j] = nums[len - 1];
len--;
j--;
}
}
}
int[] result = new int[len];
for (int i = 0; i < len; i++) {
result[i] = nums[i];
}
return result;
}
在上面的代码中,我们使用双重循环遍历数组 nums。如果发现重复元素,我们就将其用数组末尾的元素进行替换,并将数组的长度减一。这样一来,所有重复元素都被替换到了数组末尾,我们只需要将原数组的前 len 个元素拷贝到新的数组中就可以了。
4、使用 Arrays.sort 方法排序
如果数组已经排序好了,那么去重也就很方便了。因为相邻的重复元素会出现在一起,我们只需要遍历数组,跳过相邻的重复元素就可以了。而如果数组还没有排序,我们可以调用 Java 中的 Arrays.sort 方法进行排序。下面是具体实现方法:
public static int[] removeDuplicates(int[] nums) {
Arrays.sort(nums);
int i = 0;
int len = nums.length;
for (int j = 0; j < len; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
int[] result = new int[i + 1];
for (int j = 0; j <= i; j++) {
result[j] = nums[j];
}
return result;
}
在上面的代码中,我们先调用 Arrays.sort 方法将整个数组排序。然后我们使用双指针 i、j,其中 i 是不重复元素的最后一个索引,j 是当前遍历元素的索引。如果当前元素不等于之前的元素,我们就将其添加到不重复元素的最后一个位置,并将 i 向后移动一位。最后我们将原数组的前 i+1 个元素拷贝到新数组中并返回。
总结
以上就是 Java 中实现数组去重的四种方法。其中,使用 Set、Map 都是通过容器来存储不重复的元素,然后再转换为数组。使用双重循环则是用一个变量来记录不重复元素的个数,然后将元素拷贝到新数组中。使用 Arrays.sort 方法则是先对数组进行排序,然后使用双指针来遍历数组,从而找到不重复元素。这四种方法各有优缺点,具体使用哪种方法,要视具体情况而定。
