Java陣列知識整理
一、陣列的概念
陣列是相同資料型別元素的集合。
陣列本身是引用資料型別,但它可以儲存基本資料型別和引用資料型別。
二、陣列的宣告
語法一:資料型別[] 陣列名;
語法二:資料型別 陣列名[];
三、陣列的建立
兩個要素:資料型別、長度。
語法一:資料型別[] 陣列名 = new 資料型別[長度];(動態初始化,先定義陣列,然後初始化資料)
語法二:資料型別[] 陣列名 = new 資料型別[]{初始化資料};(靜態初始化,定義陣列的同時,初始化資料)
語法三:資料型別[] 陣列名 = {初始化資料};(靜態初始化)
例:
-
//定義陣列語法一
-
@Test
-
public void test_01(){
-
int[] arr = new int[3];
-
System.out.println(arr.length);
-
}
-
//定義陣列語法二
-
@Test
-
public void test_02(){
-
int[] arr = new int[]{12,11,10};
-
System.out.println(arr.length);
-
}
-
//定義陣列語法三
-
@Test
-
public void test_03(){
-
int[] arr = {12,11,10};
-
System.out.println(arr.length);
-
}
四、陣列的特點
陣列一旦定義,長度不變。
儲存的資料型別相同。
陣列的長度length是屬性。
陣列在記憶體當中處於連續的記憶體空間。
五、訪問陣列元素
訪問陣列元素需要使用索引,陣列的索引從0開始,最大值為陣列的長度減一。
語法:陣列名[索引]
例:
-
//訪問陣列元素
-
@Test
-
public void test_04(){
-
int[] arr = {11,12,13};
-
//輸出陣列的第一個元素
-
System.out.println(arr[0]);
-
}
六、陣列的遍歷
陣列遍歷就是通過索引獲取陣列中的每個元素。
例:
-
//for迴圈遍歷陣列
-
@Test
-
public void test_05(){
-
int[] arr = {1,2,3,4,5,6};
-
for(int i= 0; i < arr.length; i++){
-
System.out.println(arr[i]);
-
}
-
}
-
//while迴圈遍歷陣列
-
@Test
-
public void test_06(){
-
int[] arr = {1,2,3,4,5,6};
-
int i = 0;
-
while(i < arr.length){
-
System.out.println(arr[i]);
-
i++;
-
}
-
}
七、陣列中常見的異常
ArrayIndexOutOfBoundsException:陣列索引越界異常。
NullPointerException:空指標異常。
八、獲取陣列中的最大值
例:
-
//獲取陣列中的最大值
-
@Test
-
public void test_07(){
-
int[] arr = {89,66,8,5,99,3,5,66,78,100};
-
int max = arr[0];
-
for (int i = 1; i < arr.length; i++){
-
if(arr[i] > max){
-
max = arr[i];
-
}
-
}
-
System.out.println("陣列中的最大值為:"+max);
-
}
九、陣列的逆序
原理:首尾元素兩兩交換。
逆序不等於反向遍歷。
例:
-
//陣列的逆序
-
@Test
-
public void test_13(){
-
//定義陣列
-
int[] arr = {1,2,3,4,5};
-
int temp;
-
for(int i = 0;i <=(arr.length/2); i++){
-
temp = arr[i];
-
//陣列的長度比索引大1,所以要減去1
-
arr[i] = arr[arr.length-1-i];
-
arr[arr.length-1-i] = temp;
-
}
-
//遍歷輸出逆序後的陣列
-
for (int i = 0; i < arr.length;i++){
-
System.out.println(arr[i]);
-
}
-
}
十、二維陣列的宣告
語法:資料型別[][] 陣列名;
十一、二維陣列的建立
語法一:資料型別[][] 陣列名 = new int[二維陣列的長度][一維陣列的長度];
語法二:資料型別[][] 陣列名 = new int[二維陣列的長度][];(此種方式定義的一維陣列需要另外分配長度,其長度可以不相同)
語法三:資料型別[][] 陣列名 = new int[][]{{初始化資料},{初始化資料}};(每一對花括號是一個一維陣列,使用逗號分割。此種方式定義的一維陣列的長度可以不相同)
例:
-
//二位陣列的建立方式一
-
@Test
-
public void test_08(){
-
int[][] arr = new int[3][5];
-
//輸出二位陣列的長度
-
System.out.println(arr.length);
-
//輸出第一個一維陣列的長度
-
System.out.println(arr[0].length);
-
}
-
//二位陣列的建立方式二
-
@Test
-
public void test_09(){
-
int[][] arr = new int[3][];
-
arr[0] = new int[5]; //給第一個一維陣列分配大小
-
arr[1] = new int[6]; //給第二個一維陣列分配大小
-
//輸出二位陣列的長度
-
System.out.println(arr.length);
-
//輸出第一個一維陣列的長度
-
System.out.println(arr[0].length);
-
//輸出第二個一維陣列的長度
-
System.out.println(arr[1].length);
-
}
-
//二位陣列的建立方式三
-
@Test
-
public void test_10(){
-
int[][] arr = new int[][]{{10,11,12},{10,11,12,13}};
-
//輸出二位陣列的長度
-
System.out.println(arr.length);
-
//輸出第一個一維陣列的長度
-
System.out.println(arr[0].length);
-
//輸出第二個一維陣列的長度
-
System.out.println(arr[1].length);
-
}
十二、通過索引訪問二維陣列中的資料
語法:陣列名[二維陣列的索引][一維陣列的索引]
例:
-
//訪問陣列中的元素
-
@Test
-
public void test_11(){
-
int[][] arr = new int[][]{{10,20},{50,66}};
-
//輸出第二個一維陣列中的第一個元素
-
System.out.println(arr[1][0]);
-
}
十三、二維陣列的遍歷
思路:for迴圈的巢狀,外層迴圈遍歷二維陣列,內層迴圈遍歷一維陣列。
例:
-
//for迴圈遍歷二維陣列
-
@Test
-
public void test_12(){
-
int[][] arr = new int[][]{{1,2,3},{4,5,6},{7,8,9}};
-
//外層迴圈遍歷二維陣列
-
for(int i = 0; i < arr.length; i++){
-
//內層迴圈遍歷一維陣列
-
for (int j = 0; j < arr[i].length; j++){
-
//輸出每次遍歷所獲取的元素
-
System.out.println(arr[i][j]);
-
}
-
}
-
}
十四、選擇排序
原理:陣列中的每個元素和其他的元素比較大小,根據排序要求交換位置。
思路:使用for的巢狀迴圈。外層迴圈控制比較次數,內迴圈控制每次比較的元素。
例:
-
//選擇排序
-
@Test
-
public void test_14(){
-
//定義一維陣列
-
int[] arr = {56,98,36,33,88,77,88,4,6,99};
-
//最後剩餘的一個元素不用比較,所以要減1
-
for (int i = 0; i < arr.length - 1; i++){
-
for (int j = 1+i; j < arr.length; j++){
-
if(arr[i] > arr[j]){
-
int temp = arr[i];
-
arr[i] = arr[j];
-
arr[j] = temp;
-
}
-
}
-
}
-
//遍歷輸出陣列元素
-
for (int i = 0; i < arr.length;i++){
-
System.out.print(arr[i]+" ");
-
}
-
}
十五、氣泡排序
原理:每輪冒泡,陣列中相鄰元素兩兩比較,根據排序要求交換位置。外層迴圈控制冒泡的次數,內層迴圈控制每次比較的元素。
例:
-
//氣泡排序
-
@Test
-
public void test_15(){
-
//定義一維陣列
-
int[] arr = {88,66,23,44,5,6,77,99,52,-9};
-
for (int i = 0; i < arr.length-1; i++){
-
for (int j = 0; j < arr.length-i-1; j++){
-
if(arr[j] > arr[j+1]){
-
int temp = arr[j];
-
arr[j] = arr[j+1];
-
arr[j+1] = temp;
-
}
-
}
-
}
-
//遍歷輸出陣列元素
-
for (int i = 0; i < arr.length;i++){
-
System.out.print(arr[i]+" ");
-
}
-
}