1. 程式人生 > >Java 陣列 與 迴圈遍歷

Java 陣列 與 迴圈遍歷

Java 陣列

  • 陣列由多個元素組成,每個元素都具有相同資料型別
  • 陣列命名時名稱與[ ]可以隨意排列,但宣告的二維陣列中第一個中括號中必須要有值,它代表的是在該二維陣列中有多少個一維陣列
  • Java中,陣列是一種物件,不是基本資料型別(原生類),大小不可變,且連續儲存。因為是物件,所以在堆中。陣列名(引用) 儲存在棧記憶體中,指向堆記憶體中的內容
  • 陣列的父類是Object
  • 宣告的時候不能初始化容量,只有new的時候才可以
  • java也可能出現數組溢位,溢位時會丟擲異常:ArrayIndexOutOfBoundsException

Java一維陣列兩種宣告方式:
1. int [] nums;


2. int nums [];

Java一維陣列兩種初始化方法:

  • 靜態初始化

int array[] = new int[]{1,2,3,4,5}
或者
int array[] = {1,2,3,4,5}

需要注意的是,寫成如下形式也是錯誤的
int array[] = new int[5]{1,2,3,4,5}

錯誤原因:
Cannot define dimension expressions when an array initializer is provided

  • 動態初始化
int array[] = new int[5];
array[0] = 1;
array[1
] = 2; array[2] = 3; array[3] = 4; array[4] = 5;

靜態與動態初始化的區別就在於,前者是宣告的時候就初始化;後者是先宣告,再動態初始化。

區域性陣列new之後自動初始化:

public class Hello{ 

    public static void main(String[] args) {
        int array[] = new int[3];

        for(int x:array){
            System.out.println(x);
        }
    }
}

輸出:
0


0
0

二維陣列宣告方式:

public class Hello{ 

    public static void main(String[]args){
        int [][] table   = new int[2][2];
        int [][] table1  = new int[2][];
        int table2 [][]  = new int[2][2];
        int table3 [][]  = new int[2][];
        int [] table4 [] = new int[2][2];
        int [] table5 [] = new int[2][];

        for(int i = 0; i < table1.length; i++){
            table1[i] = new int[3];
        }

        table3[0] = new int[3];
        table3[1] = new int[4];

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

輸出:
null
null

一維陣列遍歷

int intArrayOne[]; //定義一個一維陣列
int intArrayTwo[] = {1,2,3,4,5}; //靜態初始化一個數組
intArrayOne = new int[5]; //動態初始化陣列

intArrayOne[3]=10; //給intArrayOne的第4個元素賦值為10
System.out.println(intArrayOne[0]); //引用intArrayOne陣列中的第1個元素並進行輸出,因為此時第1個元素還被賦值,所以其值為整型的預設值0,輸出為0
System.out.println(intArrayOne[3]); //引用intArrayOne陣列中的第4個元素並進行輸出
System.out.println(intArrayTwo[4]); //引用intArrayTwo陣列中的第5個元素並進行輸出
  • 靜態初始化在宣告一個數組變數的同時,進行賦值;
  • 動態初始化給一個已存在的陣列型別的變數賦一個空的陣列;
  • 兩種方法在初始化後,變數所儲存的陣列的元素數目都是確定的,使用下標進行引用時不能超過其範圍

foreach遍歷迴圈

/*
    語法:
    for(元素型別 臨時變數名:遍歷物件){
        引用了臨時變數的語句(臨時變數存入的是遍歷物件中的元素,而非元素對應的下標)
    }
*/

//for迴圈輸出一個數組中的所有元素
for(int i=0;i<=intArrayTwo.length-1;i++){
    System.out.println(intArrayTwo[i]);
}

//使用foreach迴圈進行簡化
for(int num:intArrayTwo){
    System.out.println(num);
}

多維陣列遍歷

/*
    以二維陣列為例,二維陣列可以看作是陣列的陣列,它裡面的每一個元素都是一個數組,
    且這些陣列的資料型別必須相同,但每個陣列的大小可以不同
*/

//二維陣列的宣告與初始化
int intArrayOne[][] = {{1,2},{2,3},{3,4,5}};//靜態初始化

int intArrayTwo[][];
//一次性為每一維分配空間
intArrayTwo = new int[3][2]; //intArrayTwo陣列共可以含有3個數組元素,其中每個陣列元素都可以且只能含有兩個整數

//從最高維開始,分別為每一維分配空間
intArrayThree = new int[3][];//intArrayThree陣列共含三個陣列元素
intArrayThree[0] = new int[2];//第一個陣列元素,可儲存2個元素
intArrayThree[1] = new int[3];//第二個陣列元素,可儲存3個元素
intArrayThree[2] = new int[5];//第三個陣列元素,可儲存5個元素

//二維陣列元素的引用
int num[][]=new int[2][];
num[0]=new int[2];
num[1]=new int[3];
num[0][0]=1;
num[0][1]=2;
num[1][0]=3;
num[1][1]=4;
num[1][2]=5;
System.out.println(num[0][1]); //輸出num二維陣列的第一個陣列元素的第二個元素

二維遍歷迴圈:

int numArray[][]={{1,2,3},{2,3,4},{4,5}};

//輸出所有元素
for(int[] intArray:numArray){
    for(int num:intArray){
        System.out.println(num);
    }
}