Day03 陣列

十四2001發表於2024-07-02

陣列

定義

相同型別資料的有序集合

宣告建立

  • 必須先宣告陣列,才能使用(動態初始化)
int[] nums;//定義  java
int nums2[];//定義  c/c++   
都可以用,首選第一個
  • 宣告後要建立
nums = new int[10];(預設初始化,0或null)

  • 靜態初始化: 建立+賦值
int a[] = {1,2,3,4,5};

四個基本特點

  • 長度是確定的,一旦被建立,大小不可變

  • 陣列中元素為相同型別

  • 陣列元素可以是任何資料型別,包括基本型別和引用型別

  • 陣列變數是引用型別,陣列可以看成是物件,每個元素相當於該物件的成員變數。

    陣列物件本身在堆中

陣列邊界

下標的合法區間:[0,length-1]

如果越界就會報錯:ArrayIndexOutOfBoundsException(陣列下標越界異常)

小結

  • 陣列是相同資料型別的有序集合
  • 陣列也是物件,陣列元素相當於物件的成員變數
  • 陣列的長度是確定的,不可變的。如果越界,就會報錯

陣列使用

  • 普通的for迴圈
  • for-each迴圈
  • 陣列作為方法的引數
  • 陣列作為返回值

多維陣列

多維陣列可以看成是陣列的陣列,比如二維陣列就是一個特殊的一維陣列,其每一個元素都是一個一維陣列。

int a[][] = new int[2][5];

Array類

  • toString 用於列印

  • sort 排序

  • fill 賦值

  • equals 比較是否相等

  • binarySearch 查詢

    更多看jdk8幫助文件

氣泡排序

排序後續再新開隨筆

稀疏陣列

  • 當一個陣列的大部分元素為0,或為同一值時,可以使用稀疏陣列來儲存該陣列

  • 處理方法:

    • 記錄陣列一共有幾行幾列,有多少個不同值
    • 把不同值的元素的行列及值記錄在一個小規模的陣列中,從而縮小程式的規模
  • 下圖:左邊為原始陣列,右邊是稀疏陣列

小練習:

/**
 * @version: java version 1.8
 * @Author: Mr Orange
 * @description:
 * @date: 2024-07-02 13:35
 */
public class Nums {
    public static void main(String[] args) {
        //建立新的陣列
        int[][] arr1 = new int[11][11];
        arr1[0][0] = 1;
        arr1[3][2] = 2;
        arr1[6][3] = 1;
        arr1[7][4] = 2;
        System.out.println("===============================");
        System.out.println("原始陣列");
        //列印陣列
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                System.out.print(arr1[i][j] + "  ");
            }
            System.out.println();
        }
        System.out.println("===============================");
        System.out.println("稀疏陣列:");
        int[][]xishu =  xiShu(arr1);
        System.out.println("還原陣列");
        restore(xishu);



    }
    public static int[][] xiShu(int[][] arr1) {
        //計算有多少個不同資料
        int count = 0;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                if (arr1[i][j] != 0) {
                    count++;
                }
            }
        }
        //建立稀疏陣列
        int[][] arr2 = new int[count+1][3];
        //給第一行賦值
        arr2[0][0] = arr1.length;
        arr2[0][1] = arr1[0].length;
        arr2[0][2] = count;
        //將不同資料的行、列、值,記錄到稀疏陣列中
        int flag = 1;
        for (int i = 0; i < arr1.length; i++) {
            for (int j = 0; j < arr1[i].length; j++) {
                if (arr1[i][j] != 0) {
                    arr2[flag][0] = i;
                    arr2[flag][1] = j;
                    arr2[flag][2] = arr1[i][j];
                    flag++;
                }
            }
        }
        //列印陣列
        for (int i = 0; i < arr2.length; i++) {
            for (int j = 0; j < arr2[i].length; j++) {
                System.out.print(arr2[i][j] + "  ");
            }
            System.out.println();
        }
        System.out.println("===============================");
        return arr2;
    }
    public static int[][] restore(int[][] arr2) {
        //還原
        int[][] arr3 = new int[arr2[0][0]][arr2[0][1]];
        for (int i = 1; i < arr2.length; i++) {
            arr3[arr2[i][0]][arr2[i][1]]= arr2[i][2];
        }
        //列印陣列
        for (int i = 0; i < arr3.length; i++) {
            for (int j = 0; j < arr3[i].length; j++) {
                System.out.print(arr3[i][j] + "  ");
            }
            System.out.println();
        }
        return arr3;
    }
}

相關文章