Java時間膠囊-陣列的使用(1)
阿新 • • 發佈:2020-12-06
Java時間膠囊-陣列的使用(1)
陣列(Array)
- 是多個相同型別資料按照一定順序排列的集合 並使用一個名字命名 並通過編號的方式對這些資料進行統一管理
陣列的概述
陣列的相關概念
- 陣列名
- 元素
- 索引/下標/角標(從零開始)
- 陣列的長度(陣列儲存元素的個數)
陣列的相關特點
- 陣列元素是有序排列
- 陣列是引用資料型別 ---> 陣列的元素既可以是基本資料型別也可以是引用資料型別
- 陣列的長度一旦確定 不能修改
- 建立陣列物件會在記憶體中開闢一整塊連續的空間 而陣列名中引用的是這塊連續空間的首地址
陣列的分類
- 按照維數 一維陣列.二維陣列(會出現 少).. .. .
- 按照陣列元素的型別陣列分為:基本資料型別元素的陣列 引用資料型別元素的分組
陣列的使用
一維陣列的使用
- 一維陣列的宣告和初始化
- 如何呼叫陣列的指定索引位置元素
- 獲取陣列的長度
- 遍歷陣列
- 陣列元素的預設初始化值
- 陣列的記憶體解析
1~5
// 1. 一維陣列的宣告和初始化 int[] ids;// 宣告 // 1.1 靜態初始化(陣列的初始化和陣列元素的賦值操作同時進行)(知道值的情況下進行)(引用型別初始化 --->new... .. .) ids = new int[] { 1001, 1002, 1003, 1004 }; // 1.2 動態初始化(陣列的初始化和陣列元素的賦值操作分開進行)(不知道值的情況下進行) String[] names = new String[5]; // 總結:無論靜態還是動態初始化 陣列初始化完成後 ---> 陣列長度就確定了(陣列的長度一旦確定 不能修改) // 2. 如何呼叫陣列指定位置的元素:通過索引(index)的方式(一方面賦值 /一方面呼叫) // Java中陣列的索引 ---> 從0開始~到陣列長度-1結束 // 編譯只是生成位元組碼檔案 真正執行中才將位元組碼檔案解釋執行在記憶體中 names[0] = "張三"; names[1] = "李四"; names[2] = "王五"; names[3] = "趙六"; names[4] = "李七"; // 3. 如何獲得陣列長度 System.out.println(names.length); System.out.println(ids.length); // 4. 遍歷陣列元素(將陣列元素全部輸出) for (int i = 0; i < names.length; i++) { System.out.println(names[i]); } // 5. 陣列元素的預設初始化值 System.out.println("\n整型資料型別陣列預設值:"); System.out.println("--------------------------------------------------"); int[] arr = new int[4]; for (int i = 0; i < arr.length; i++) { System.out.println(arr[i]); }// 輸出 = 0/0/0/0 ---> 0這是整型陣列的預設初始化值 System.out.println("\n短整型資料型別陣列預設值:"); System.out.println("--------------------------------------------------"); short[] arr1 = new short[4]; for (int i = 0; i < arr1.length; i++) { System.out.println(arr1[i]); } System.out.println("\n浮點型資料型別陣列預設值:"); System.out.println("--------------------------------------------------"); double[] arr2 = new double[4]; for (int i = 0; i < arr2.length; i++) { System.out.println(arr2[i]); } System.out.println("\n字元型資料型別陣列預設值:"); System.out.println("--------------------------------------------------"); char[] arr3 = new char[4]; for (int i = 0; i < arr3.length; i++) { System.out.println(arr3[i]); }// 輸出是相當於空格的效果 但不是空格(空格ASCII == 48)輸出結果是0 System.out.println("\n布林型資料型別陣列預設值:"); System.out.println("--------------------------------------------------"); boolean[] arr4 = new boolean[4]; for (int i = 0; i < arr4.length; i++) { System.out.println(arr4[i]); } System.out.println("\n引用資料型別陣列預設值:"); System.out.println("--------------------------------------------------"); String[] arr5 = new String[4]; for (int i = 0; i < arr5.length; i++) { System.out.println(arr5[i]); } /* * 陣列元素的預設初始化值... .. . * 陣列元素是整形:0 * 陣列元素是浮點型:0.0 * 陣列元素是char型:0或者'\u0000' 而非'0' * 陣列元素是boolean型:false * * 陣列元素是引用資料型別:null * */
6. 陣列記憶體結構簡單說明(結構的規範在jVM中體現)(隨著JDK版本的提升 規範也有所變化)
- 記憶體中主要結構:棧(stack)(是線性表結構) 堆(heap)方法區(常量池 靜態域 還有類載入的資訊... .. .)
- 棧 ---> 儲存區域性變數 引用
- 堆 ---> 物件 陣列
- (String --> 常量池static --> 靜態域)
- 棧 ---> 堆 堆中連續的空間 使用首地址值(使用16進製表示) 值賦予棧空間引用
一維陣列的簡單應用
從鍵盤輸入5個學生成績 提取最高分 並分級輸出每個學生的成績等級
... .. .
多維陣列(二維即以上)
- 如果說可以把一維陣列當作幾何中的線性結構 那麼二維陣列就相當於一個表格(對於多維陣列 陣列的元素可以是引用型別 那麼陣列的元素也可以是陣列 可以想象一個線性結構 它的每一項都是陣列 就構成了表格(二維陣列))
- 把一個數組當作另一個數組的元素 即是二維陣列
- 從計算機底層來看 沒有二維陣列 因為當棧中引用指向堆中的一維陣列 一維陣列的每一項索引 又指向堆中的一項一維陣列
二維陣列的使用
- 二維陣列的宣告和初始化
- 如何呼叫陣列的指定索引位置元素
- 獲取陣列的長度
- 遍歷陣列
- 陣列元素的預設初始化值
- 陣列的記憶體解析
// 1. 二維陣列的宣告和初始化
// 1.1 靜態初始化
int[][] arr1 = new int[][] { { 1, 2, 3 }, { 4, 5 }, { 6, 7, 8 } };
// 1.2 動態初始化
int[][] arr2 = new int[3][2];
// 1.2.1 動態初始化
int[][] arr3 = new int[3][];
// 2. 如何呼叫陣列的指定位置的元素
System.out.println(arr1[0][0]);
System.out.println(arr1[1][1]);
System.out.println(arr2[0][0]);
// 3. 獲取陣列的長度
System.out.println(arr1.length);
System.out.println(arr1[1].length);
// 4. 如何遍歷二維陣列
for (int i = 0; i < arr1.length; i++) {
for (int j = 0; j < arr1[i].length; j++) {
System.out.print(arr1[i][j] + "\t");
}
System.out.println();
}
/*
* 5. 陣列元素的預設初始化值 規定:二維陣列 我們分為兩層(外層陣列元素 內層陣列元素) int[][] arr = new
* int[4][3]; 外層元素:arr[0],arr[1].. .. . 內層元素:arr[0][0],arr[1][2]... .. .
*
*/
int[][] arr = new int[4][3];
System.out.println(arr[0]);// [I@15db9742 “[”代表是一維的陣列 “I”是int型
// “@”地址是15db9742(hex) 因為陣列每一個下標中都存著陣列
System.out.println(arr[0][0]);// 0
String[][] arr4 = new String[4][2];
System.out.println(arr4[1]);// [Ljava.lang.String;@6d06d69c
System.out.println(arr4[1][1]);// null
double[][] arr5 = new double[4][];
System.out.println(arr5[1]);// null 因為陣列的每一個下標中儲存的是陣列 現在下標中並沒有初始化過
// 所以是null 無關是何種型別
/*
* 針對於初始化方式1:int[][] arr = new int[4][3];
* 外層元素的初始化值為:地址值
* 內層元素的初始化值為:與一維陣列初始化情況相同
* 針對於初始化方式1:int[][] arr = new int[4][];
* 外層元素的初始化值為:null
* 內層元素的初始化值為:不能呼叫 否則報錯
*/