Java数组元素去重(不使用集合)

/*
* 需求:去除整型数组中重复的元素,不能使用集合等方法
*
* 解决思路:
*       1、对数组中的元素进行从小到大的顺序排序
*       2、获取数组中重复元素的个数
*       3、获取数组中重复元素的索引位置,并存入创建的索引数组
*       4、创建去重数组,去重数组长度 = 原始数组长度 - 重复元素个数
*       5、将原始数组的值赋给去重数组,遇到重复元素的索引位置则不赋值
*/

public class ShuZu {
    public static void main(String[] args) {
        int OldArray[] = {0,1,6,2,2,3,3,5,87,43,12,3,123,43,3,42,3,12,31,23,12,3,1,23,1,6,5,23};
        //遍历原始数组
        System.out.println("原始数组:");
        for (int i = 0; i < OldArray.length; i++) {
            System.out.print(OldArray[i] + " ");
        }
        System.out.println();   //换行作用
        //冒泡排序,从小到大排序
        for (int i = 1; i < OldArray.length; i++) {
            for (int j = 0; j < OldArray.length - i; j++) {
                if (OldArray[j] > OldArray[j+1]){
                    int temp = OldArray[j];
                    OldArray[j] = OldArray[j + 1];
                    OldArray[j + 1] = temp;
                }
            }
        }

        //计算重复元素的个数
        int count = 0;
        for (int i = 0; i < OldArray.length - 1; i++) {
            //若后面元素等于前面元素,则表示有重复元素
            if (OldArray[i] == OldArray[i + 1]){
                count++;
            }
        }

        //创建索引数组,保存原始数组中重复元素的索引位置
        int index = 0;
        int indexArray[] = new int[count];
        for (int i = 0; i < OldArray.length - 1; i++) {
            //若后面元素等于前面元素,则将后面元素的索引位置赋给索引数组
            if (OldArray[i] == OldArray[i + 1]){
                indexArray[index] = i + 1;
                index++;
            }
        }

        //创建去重数组
        int newArray[] = new int[OldArray.length - count];
        //定义索引数组的起始索引位置
        int indexOfIndexArray = 0;
        //定义去重数组的起始索引位置
        int indexOfNewArray = 0;
        for (int i = 0; i < OldArray.length; i++) {
            //索引位置不能超过索引数组的边界
            if(indexOfIndexArray < indexArray.length){
                if(i == indexArray[indexOfIndexArray]){
                    indexOfIndexArray++;
                }else {
                    //非重复元素赋予去重数组
                    newArray[indexOfNewArray] = OldArray[i];
                    //去重数组的索引位置自增1
                    indexOfNewArray++;
                }
            } else {
                //非重复元素赋予去重数组
                newArray[indexOfNewArray] = OldArray[i];
                //去重数组的索引位置自增1
                indexOfNewArray++;
            }
        }
        //遍历去重数组
        System.out.println("去重数组:");
        for (int i = 0; i < newArray.length; i++) {
            System.out.print(newArray[i] + " ");
        }

    }
}

运行结果如下:

原始数组:
0 1 6 2 2 3 3 5 87 43 12 3 123 43 3 42 3 12 31 23 12 3 1 23 1 6 5 23 
去重数组:
0 1 2 3 5 6 12 23 31 42 43 87 123
原文地址:https://www.cnblogs.com/xuliang-daydayup/p/12945959.html