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;
    }
}

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

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

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

相关文章

  • Java Date(日期)对象进行格式化的思路详解

    以下是Java Date(日期)对象进行格式化的完整攻略。 格式化思路 Java中提供了SimpleDateFormat类,可以将Date对象转换成指定格式的字符串。SimpleDateFormat类中定义了一些字符,用于表示时间在输出时应该如何格式化。例如,字符yyyy表示年份,MM表示月份,dd表示日期,HH表示小时,mm表示分钟,ss表示秒钟等。这些字…

    Java 2023年5月20日
    00
  • MyBatis-Plus集成Druid环境搭建的详细教程

    下面我将为你介绍Mybatis-Plus集成Druid环境搭建的详细教程,包括环境搭建、配置和代码演示。首先,我们需要明确一下什么是Mybatis-Plus和Druid。 什么是MyBatis-Plus和Druid? MyBatis-Plus MyBatis-Plus(简称MP)是一个在MyBatis框架基础上的增强工具,省去了很多重复性的代码,提供了更为简…

    Java 2023年5月20日
    00
  • eclipse怎么实现java连oracle数据库?

    要在Eclipse中使用Java连接Oracle数据库,需要完成以下步骤: 步骤一:安装Oracle JDBC驱动程序 在Eclipse中连接Oracle数据库,需要下载并安装Oracle JDBC驱动程序。 下载最新的Oracle JDBC驱动程序,例如ojdbc6.jar或ojdbc8.jar。 将下载的jar文件复制到Eclipse项目的/libs目录…

    Java 2023年5月19日
    00
  • Java算法真题详解运用单调栈

    Java算法真题详解运用单调栈攻略 1. 什么是单调栈 单调栈是指栈中元素单调递增或递减的栈。 单调栈在算法中的应用比较广泛,经常用来解决类似于比当前数大的第一个数、比当前数小的第一个数等等问题。 2. 单调栈解法 单调栈的解法分为两类:单调递增栈和单调递减栈。具体的应用方式如下: 2.1. 单调递增栈 单调递增栈指栈中元素单调递增,栈底元素最小。 单调递增…

    Java 2023年5月19日
    00
  • Hibernate中Session.get()方法和load()方法的详细比较

    让我来详细讲解“Hibernate中Session.get()方法和load()方法的详细比较”。 一、概述 Hibernate是广泛使用的ORM框架之一,其最基本的操作是通过Session实例来执行。在Session实例中,get()方法和load()方法是最常用的两个方法之一。它们用于从数据库中检索对象,但它们有一些微小的区别。 在这篇文章中,我们将会比…

    Java 2023年5月20日
    00
  • Java线程池必知必会知识点总结

    Java线程池必知必会知识点总结 在并发编程中,线程池是一种重要的资源管理方式。线程池可以管理和执行多个线程,从而提高程序的性能和效率,同时还能避免线程创建和销毁的开销。 本文将介绍Java线程池的相关知识点,包括线程池的基本概念、实现原理、使用方法和注意事项。 线程池的基本概念 Java中的线程池主要有两种实现方式:FixedThreadPool和Cach…

    Java 2023年5月20日
    00
  • JAVA CountDownLatch(倒计时计数器)用法实例

    JAVA CountDownLatch(倒计时计数器)用法实例 什么是 CountDownLatch CountDownLatch(倒计时计数器)是 Java 提供的一个同步工具类,通过它可以让一个或多个线程等待其它线程完成各自的工作后再继续执行。 在 CountDownLatch 中,我们可以设置一个计数器的初始值 n,然后调用 countDown() 方…

    Java 2023年5月20日
    00
  • javascript计算当月剩余天数(天数计算器)示例代码

    这里就为你详细讲解一下 “javascript计算当月剩余天数(天数计算器)示例代码”的完整攻略吧。 一、前置知识 在开始编写这个 JavaScript 计算当月剩余天数的样例代码之前,你需要了解以下几个前置知识: JavaScript 基础语法:了解 JavaScript 基本数据类型、运算符、条件语句、循环语句等基础语法。 Date 对象:了解 Java…

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