欢迎访问宙启技术站
智能推送

Java函数实现数组去重的方法是什么?

发布时间:2023-06-24 16:28:34

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 方法则是先对数组进行排序,然后使用双指针来遍历数组,从而找到不重复元素。这四种方法各有优缺点,具体使用哪种方法,要视具体情况而定。