(PASS)JAVA數組去重 三種方法 (不用集合)


第一種方法(只學到數組的看):

定義一個新的數組長度和舊數組的長度一樣,存儲除去重復數據的舊數組的數據和0,

package demo01;

import java.sql.Array;
import java.util.Arrays;
/*JAVA數組去重**/
public class ArrayQC {
    public static void main(String[] args) {
        // 獲取一個無重復元素的數組
        int[] arr = new int[] { 11, 22, 22, 33, 44, 55, 44, 66, 66, 66 };
        // 先確定新數組的長度
        int[] newArr = new int[arr.length];

        int index = 0; // 新數組存儲元素索引(或者說無重復的個數)

        outer: for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                         //當數據重復時,跳出外圈循環
                if (arr[i] == arr[j]) {
                    //System.out.println("arr[i]:"+arr[i]+"arr[j]:"+arr[j]);
                    continue outer;
                }
            }
            // 后面沒有與當前元素重復的值,保存這個數
            //System.out.println("for內的index:"+index);
            newArr[index] = arr[i];
            index++;
        }
        // 新數組中存儲着無重復的值和后面一些無效的0
        //System.out.println("index:"+index);
        int[] result = new int[index];
        for (int i = 0; i < index; i++) { // 遍歷有效值個數
            result[i] = newArr[i];
        }
        System.out.println(Arrays.toString(result));
    }

}

第二中方法:

 /* 第二種方法:
     * 
     * 一個一個刪除,有一個刪一個. 
     * 把數組中的一個數據和其他數據進行比較,如果有一個重復時,就直接開始創建新數組把重復的元素去除,並重新賦給舊數組
     */

public static void main(String[] args) {

    int[] arr = { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; // 1, 5, 3, 4, 8

    for (int i = 0; i < arr.length; i++) {

        for (int j = i + 1; j < arr.length; j++) {

            if (arr[i] == arr[j]) {
                //System.out.println("arr[i]:"+arr[i]+",arr[j]"+arr[j]);
                // return返回的數字的地址而非數組的數值(不懂的華看一下變量的 名 和所代表的數據地址的關系)
                arr = aa(arr, j);
                // 改變的數組中新數據頂替了覆蓋數組的就數據,所以還要重新比較一次
                
                 // { 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 }; 下標 0 1 2
                 // 當下標為1被刪除了 ,下標2的數據補上 0 2 這個新元素還沒有被比較,所以要再比較一次,所以j--
                //System.out.println("j:"+j); 
                j--;
            }
        }
    }

    for (int i = 0; i < arr.length; i++) {
        System.out.println(arr[i]);
    }

}

// 需要獲得舊數組和重復元素的下標,然后改成新數組並返回出來新數組
public static int[] aa(int[] arr, int index) {

    // 新數組,每發現一個就去除一個.所以長度-1 就行
    int[] newArr = new int[arr.length - 1];
    // 因為就數組的下標要去除一個,又不知道那個,所以定義一個變量自增來當新數組的下標
    int c = 0;
    for (int i = 0; i < arr.length; i++) {
        // 判斷傳進來的那個重復的下標和數組中的下標相等時,下標的元素就不用重新賦給新數組了
        if (index != i) {
            newArr[c] = arr[i];
            c++;
        }
    }
//System.out.println("newArr:"+newArr.toString());
    //bl(newArr);
    return newArr;
}

//遍歷數組
//public static void bl(int[] arr){
//    for(int i = 0 ; i < arr.length ; i++){
//        System.out.print(arr[i]+ ",    ");
//    }
//}

 

第三種方法;

    /**第三種方法:
     * 
     *  相同的一起刪除,當發現相同的元素,先統計重復的個數,然后一起刪掉,得到新數組賦給舊數組 */

    public static void main(String[] args) {

        int[] arr = { 8, 1, 1, 1, 1, 5, 3, 3, 4, 8, 8, 8, 8 };

        arr = a2(arr);

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    public static int[] a2(int[] arr) {

        int a = 0;

        for (int i = 0; i < arr.length - 1; i++) {

            for (int j = i; j < arr.length - 1; j++) {

                // 如果有相同的,就統計出相同元素的個數
                if (arr[i] == arr[j + 1]) {
                    a += 1;
                }
            }
            if (a != 0) {
                // return返回的數字的地址而非數組的數值(不懂的華看一下變量的 名 和所代表的數據地址的關系)
                arr = a1(arr, arr[i], a);
                // 一個元素個數獲得到,統計變量清零,等待回去下一個元素重復的個數
                a = 0;
            }
        }
        System.out.print("方法a2:");
        bl(arr);
        return arr;
    }

    // 刪除里面重復的元素
    public static int[] a1(int[] arr, int arr2, int a) {
        // 因為就數組的下標要去除一個,又不知道那個,所以定義一個變量自增來當新數組的下標
        int c = 1;
        // 獲得新數組的長度,就是舊數組減去元素重復的次數
        int[] aa = new int[arr.length - a];
        // 重復的元素也要保留一個
        aa[0] = arr2;
        for (int i = 0; i < arr.length; i++) {
            // 不與重復元素相同的元素都非給新數組
            if (arr2 != arr[i]) {
                aa[c++] = arr[i];
            }
        }
        System.out.print("方法a1:");
        bl(aa);
        return aa;
    }

    //遍歷數組
    public static void bl(int[] arr){
        for(int i = 0 ; i < arr.length ; i++){
            System.out.print(arr[i] + ",    ");
        }
        System.out.println("數組遍歷完畢。");
    }    

參考文檔: https://blog.csdn.net/binLi_Cheng/article/details/81383197


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM