去除数组的重复元素并排序
-
数组不可缩小和扩容,所以先新建一个同原数组相同长度的新数组
-
先对原数组进行排序,这样原数组元素依次存储到新数组后,新数组也是有序的
-
因为新数组内是没有数组的,所以原数组的第一个元素一定不会重复,先把第一个元素存入新数组
-
声明一个新数组下标起始值为0
-
声明一个统计重复次数的变量count,因为重复多少次就证明原数组需要去除多少位元素
-
遍历原数组(从下标1开始)
-
取出原数组的元素,同新数组的最后一位元素判断是否相等
-
为啥同新数组最后一位元素进行判断,而不同前面的元素进行判断呢?
(1)因为已经将原数组进行了排序,并且是依次判断存入新数组
(2)取得原数组的元素下标时,前面的元素都进行判断存入了新数组,所以说新数组最后一个元素之前都小于该原数组的下标元素,不用进行判断
-
如果不相等就存入新数组
-
相等就变量count加一
-
遍历结束,返回新数组的前array.length - count位
-
去重方法
public static int[] arrayDistinct(int [] array) {
int [] array1 = new int [array.length]; // 新数组
Arrays.sort(array); // 原数组排序
array1[0] = array [0]; // 排好序的原数组的第一元素,一定会存入新数组
int k = 0; // 新数组下标起始值
int count = 0; //统计重复次数
for (int i = 1; i < array.length; i++) { //因为 0 下标元素,已存入新数组, 所以循环从1 开始
System.out.println("取出原数组下标元素为:" + array[i]);
System.out.print("第"+i+"次判断\t");
if(array1[k] != array[i]){ // 取出原数组的元素,与 新数组的最后一个元素进行判断
array1[k + 1] = array[i];// 如果不相等,将原数组元素存储到新数组内
System.out.println("元素不同,已存入新数组");
k++; // 新数组下标加一
}else {
count++;//如果不相等, 统计重复次数
System.out.println("元素相同,不存入新数组,count加一为:"+count);
}
System.out.println("新数组:"+Arrays.toString(array1) + "\t重复次数:" + count);
}
return Arrays.copyOf(array1,array1.length - count); // 返回新数组的前array.length - count位
}
主方法
public static void main(String[] args) {
int [] array = {1,2,4,4,4,5,6,7,8,9};
System.out.println("去重前:"+Arrays.toString(array));
System.out.println("去重后"+arrayDistinct(array).toString());
}
控制台