1. 程式人生 > 實用技巧 >Java時間膠囊-陣列的使用(1)

Java時間膠囊-陣列的使用(1)

Java時間膠囊-陣列的使用(1)

陣列(Array)

  • 是多個相同型別資料按照一定順序排列的集合 並使用一個名字命名 並通過編號的方式對這些資料進行統一管理

陣列的概述

陣列的相關概念

  • 陣列名
  • 元素
  • 索引/下標/角標(從零開始)
  • 陣列的長度(陣列儲存元素的個數)

陣列的相關特點

  • 陣列元素是有序排列
  • 陣列是引用資料型別 ---> 陣列的元素既可以是基本資料型別也可以是引用資料型別
  • 陣列的長度一旦確定 不能修改
  • 建立陣列物件會在記憶體中開闢一整塊連續的空間 而陣列名中引用的是這塊連續空間的首地址

陣列的分類

  • 按照維數 一維陣列.二維陣列(會出現 少).. .. .
  • 按照陣列元素的型別陣列分為:基本資料型別元素的陣列 引用資料型別元素的分組

陣列的使用

一維陣列的使用

  1. 一維陣列的宣告和初始化
  2. 如何呼叫陣列的指定索引位置元素
  3. 獲取陣列的長度
  4. 遍歷陣列
  5. 陣列元素的預設初始化值
  6. 陣列的記憶體解析
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. 二維陣列的宣告和初始化
  2. 如何呼叫陣列的指定索引位置元素
  3. 獲取陣列的長度
  4. 遍歷陣列
  5. 陣列元素的預設初始化值
  6. 陣列的記憶體解析
		// 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
		 * 		內層元素的初始化值為:不能呼叫 否則報錯
		 */