Java实现的数组去重与排序操作详解

Java实现的数组去重与排序操作详解

1. 去重操作

1.1 利用HashSet去重

利用HashSet可以对无序数组进行去重,操作属于较为简单的算法。

示例代码如下:

public static int[] removeDuplicates(int[] nums) {
    Set<Integer> set = new HashSet<>();
    for (int num : nums) {
        set.add(num);
    }
    int[] result = new int[set.size()];
    int i = 0;
    for (int num : set) {
        result[i++] = num;
    }

    return result;
}

在该示例中,我们利用HashSet的特性,快速进行无序数组去重操作。需要注意的是,在HashSet中数字的存储并不是按照原数组的顺序进行的,因此操作后的结果也将变为无序。

1.2 利用双指针去重

利用双指针可以对有序数组进行去重操作,也是计算时间更少的去重算法。

示例代码如下:

public static int[] removeDuplicates(int[] nums) {
    if (nums.length == 0) {
        return nums;
    }
    int i = 0;
    for (int j = 1; j < nums.length; j++) {
        if (nums[j] != nums[i]) {
            i++;
            nums[i] = nums[j];
        }
    }
    int[] result = new int[i + 1];
    System.arraycopy(nums, 0, result, 0, i + 1);
    return result;
}

在该示例中,我们利用了有序数组的特性,通过快速比对数组元素,屏蔽掉重复的元素,实现了快速的去重操作。

2. 排序操作

2.1 利用Arrays.sort()函数排序

Java中提供了快速排序Arrays.sort()函数,可以快速对数组进行排序。

示例代码如下:

public static void sortArray(int[] nums) {
    Arrays.sort(nums);
}

在该示例中,我们调用了Java自带的Arrays.sort()函数,即可对数组进行排序操作。

2.2 利用快速排序算法进行排序

利用快速排序算法进行排序操作,也是一种快速排序算法。

示例代码如下:

public static void sortArray(int[] nums, int left, int right) {
    if (left < right) {
        int pivotIndex = partition(nums, left, right);
        sortArray(nums, left, pivotIndex - 1);
        sortArray(nums, pivotIndex + 1, right);
    }
}

private static int partition(int[] nums, int left, int right) {
    int pivot = nums[left];
    int i = left;
    int j = right;
    while (i < j) {
        while (i < j && nums[j] > pivot) j--;
        while (i < j && nums[i] <= pivot) i++;
        if (i < j) {
            swap(nums, i, j);
        }
    }
    swap(nums, left, i);
    return i;
}

private static void swap(int[] nums, int i, int j) {
    int temp = nums[i];
    nums[i] = nums[j];
    nums[j] = temp;
}

在该示例中,我们通过快速排序算法实现了对数组的快速排序。

3. 完整操作示例

下面给出一份完整的实现示例,对数组的去重和排序操作,包括双指针操作、HashSet去重操作、Arrays.sort()排序操作和快速排序算法实现操作。

示例代码如下:

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

public class ArrayUtils {

    // 双指针去重操作
    public static int[] removeDuplicatesByDoublePointer(int[] nums) {
        if (nums.length == 0) {
            return nums;
        }
        int i = 0;
        for (int j = 1; j < nums.length; j++) {
            if (nums[j] != nums[i]) {
                i++;
                nums[i] = nums[j];
            }
        }
        int[] result = new int[i + 1];
        System.arraycopy(nums, 0, result, 0, i + 1);
        return result;
    }

    // HashSet去重操作
    public static int[] removeDuplicatesByHashSet(int[] nums) {
        Set<Integer> set = new HashSet<>();
        for (int num : nums) {
            set.add(num);
        }
        int[] result = new int[set.size()];
        int i = 0;
        for (int num : set) {
            result[i++] = num;
        }

        return result;
    }

    // Arrays.sort()函数排序
    public static void sortArrayByArraysSort(int[] nums) {
        Arrays.sort(nums);
    }

    // 快速排序算法排序
    public static void sortArrayByQuickSort(int[] nums, int left, int right) {
        if (left < right) {
            int pivotIndex = partition(nums, left, right);
            sortArrayByQuickSort(nums, left, pivotIndex - 1);
            sortArrayByQuickSort(nums, pivotIndex + 1, right);
        }
    }

    private static int partition(int[] nums, int left, int right) {
        int pivot = nums[left];
        int i = left;
        int j = right;
        while (i < j) {
            while (i < j && nums[j] > pivot) j--;
            while (i < j && nums[i] <= pivot) i++;
            if (i < j) {
                swap(nums, i, j);
            }
        }
        swap(nums, left, i);
        return i;
    }

    private static void swap(int[] nums, int i, int j) {
        int temp = nums[i];
        nums[i] = nums[j];
        nums[j] = temp;
    }
}

在该示例中,我们完成了对数组的去重和排序操作,可以满足大多数的需求场景。

阅读剩余 75%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java实现的数组去重与排序操作详解 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • Spring boot外部配置(配置中心化)详解

    Spring Boot 外部配置(配置中心化)详解 什么是 Spring Boot 外部配置? Spring Boot 提供了一种在不同环境下轻松配置应用程序的方法。我们可以将配置信息从代码中分离出来,采用外部化配置。该方法所需的参数可以存储在不同的位置中,如属性文件、YAML 文件、环境变量、数据库或远程配置服务器等,从而达到配置中心化的目的。这样做,可以…

    Java 2023年5月15日
    00
  • 浅谈idea live template高级知识_进阶(给方法,类,js方法添加注释)

    浅谈idea live template高级知识_进阶(给方法,类,js方法添加注释) IDEA中的Live Templates是一个非常方便的功能,可以帮助我们快速地插入常用的代码格式。本文将介绍如何使用Live Templates为方法、类和JS方法添加注释。 为方法添加注释 步骤1:打开Live Templates设置 首先,要打开IDEA的Live …

    Java 2023年6月15日
    00
  • SpringBoot yaml语法与JRS303校验超详细讲解

    下面我就给你介绍一下Spring Boot中的yaml语法和JRS303校验的全面攻略。 一、Spring Boot yaml语法 1.1 简介 在Spring Boot项目中,我们可以通过yaml语法来配置项目相关信息。yaml是一种人类可读的数据序列化格式,而且在Spring Boot中默认使用了yaml作为配置文件的语法。相比于xml和properti…

    Java 2023年5月19日
    00
  • Java 7大常见排序方法实例详解

    Java 7大常见排序方法实例详解 排序算法是计算机科学中的重要技能之一,Java为开发者提供了多种常见的排序方法,本文将介绍Java 7大常见排序方法并提供详细的示例说明。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,它的思想是依次比较相邻的两个元素,如果前面的元素比后面的元素大,则交换这两个元素的位置,通过多次比较和交换,将…

    Java 2023年5月26日
    00
  • SpringBean和Controller实现动态注册与注销过程详细讲解

    下面是关于“SpringBean和Controller实现动态注册与注销过程详细讲解”的攻略。 什么是Spring Bean和Controller Spring Bean是指Spring框架中被容器管理的Java对象,它们被创建、组装和管理。Spring Bean是通过IoC(Inverse of Control,控制反转)的方式进行管理,即对象的创建由Sp…

    Java 2023年5月20日
    00
  • java算法之静态内部类实现雪花算法

    下面我来为您详细讲解Java算法之静态内部类实现雪花算法的完整攻略。 什么是雪花算法 雪花算法是分布式系统中生成唯一ID的一种算法,其核心思想是在64位的二进制数中,用前41位作为时间戳,后23位作为机器标识和序列号,从而可以实现在分布式系统中生成唯一ID。 静态内部类实现雪花算法 算法设计思路 定义一个类Snowflake,其构造方法接收两个参数:机器ID…

    Java 2023年5月26日
    00
  • springboot使用Mybatis-plus分页插件的案例详解

    下面是一个完整的攻略,包含了使用Mybatis-plus分页插件的详细步骤和两个使用示例。 1. 引入Mybatis-plus分页插件 首先,需要引入Mybatis-plus分页插件,可以通过maven添加依赖: <dependency> <groupId>com.baomidou</groupId> <artifa…

    Java 2023年5月19日
    00
  • spring boot 默认异常处理的实现

    Spring Boot 默认的异常处理机制可以根据不同的异常类型,自动返回对应的 HTTP 状态码,同时输出异常信息,帮助我们快速定位错误。 默认情况下,无需显式配置,Spring Boot 就可以捕获控制器方法抛出的异常及一些框架内部异常。当异常被捕获后,Spring Boot 会根据异常类型来自动选择以下处理步骤: 如果是 HTTP 400 错误,返回 …

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部