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技术站