
一、引入單個變量只能保存一份數據如果需要操作大量數據就要定義很多獨立變量編碼十分繁瑣。普通變量無法完成批量統一操作。解決方案使用數組。二、一維數組1. 概念一次性分配多個相同數據類型的內存空間可以對這批空間做統一操作。2. 數組聲明與分配空間數組聲明三種寫法推薦第一種//推薦寫法 數據類型[] 數組名; //寫法二 數據類型 [] 數組名; //寫法三C語言風格不推薦 數據類型 數組名[];分配堆內存空間長度代表數組能夠存儲元素的總個數數組名 new 數據類型[長度];3. 數組使用細節下標索引每個存儲空間的編號從 0 開始范圍0 ~ 數組長度?1數組訪問//賦值 數組名[下標] 數據; //取值訪問 數組名[下標];下標越界異常訪問下標超過最大下標編譯不報錯運行拋出java.lang.ArrayIndexOutOfBoundsException數組下標越界。數組遍歷循環逐個訪問數組中全部元素一般使用for循環。獲取數組長度數組名.length數組元素默認初始值數組一旦創建系統自動給每個元素賦默認值 | 數據類型 | 默認值 | | ---- | ---- | | 整數 (byte/short/int/long)|0| | 浮點 (float/double)|0.0| |char|\u0000空字符 | |boolean|false| | 引用類型 (String、對象等)|null|4. 數組其他定義初始化方式聲明同時分配空間數據類型[] 數組名 new 數據類型[長度];聲明同時顯示初始化方式一數據類型[] 數組名 new 數據類型[]{值1,值2,值3};注意數組長度由大括號內元素個數決定[]中不能寫長度。聲明同時顯示初始化方式二簡寫數據類型[] 數組名 {值1,值2,值3};注意該寫法聲明和初始化必須寫在同一行不能分開。三、數組內存原理數組在堆內存中占用連續的內存空間。尋址公式首地址 下標 * 對應數據類型字節數棧、堆分工棧存放數組變量數組名保存數組在堆中的首地址。堆存放數組真實元素空間。數組變量互相賦值傳遞的是堆內存的首地址兩個變量指向同一塊數組。數組作為函數返回值返回的也是數組堆內存的首地址。四、數組擴容1. 擴容原因數組空間一旦分配完成長度不可修改。原有數組存滿想要繼續保存數據就需要數組擴容。2. 擴容核心思想創建一個長度更大的新數組通常為原數組 2 倍將舊數組全部元素拷貝到新數組把新數組首地址賦值給舊數組變量覆蓋舊地址3. 三種擴容實現方式方式 1手動完成三步手動拷貝循環賦值創建更大長度新數組for 循環遍歷原數組把元素逐個拷貝到新數組將新數組地址賦值給原數組變量方式 2System.arraycopy 工具拷貝只完成拷貝邏輯不會自動創建新數組//System.arraycopy(原數組,原數組起始下標,目標數組,目標數組起始下標,拷貝元素個數) System.arraycopy(a,0,b,0,a.length);方式 3Arrays.copyOf最簡潔需要導包import java.util.Arrays;//參數1原數組參數2新數組長度 int[] newArr Arrays.copyOf(a,a.length*2);五、可變長參數概念函數接收參數的個數不固定可以動態變化。語法public static 返回值類型 函數名(數據類型...參數名){ }底層原理調用時傳入的若干實參會自動封裝成對應類型的數組可變參數在函數內部直接當做數組使用。??重要限制一個方法最多只能定義一個可變長參數可變長參數必須放在形參列表的最后位置。六、數組排序排序按照指定規則對數組內元素重新排列。冒泡排序相鄰兩個元素兩兩比較如果前大于后就交換每一輪把當前無序區間最大的元素向后移動。支持升序、降序。選擇排序每一輪固定一個下標拿該下標元素和后面所有元素比較滿足條件就交換每一輪選出無序區間最小升序或者最大元素。JDK 工具類排序底層快速排序import java.util.Arrays; Arrays.sort(數組名);七、二維數組本質一維數組里面存放一維數組。1. 聲明與分配空間//聲明 數據類型[][] 數組名; //分配空間行數、列數 數組名 new 數據類型[行數][列數];2. 使用細節訪問格式數組名[行標][列標]行標、列標全部從 0 開始。二維數組元素默認值和一維數組完全一致。獲取行列長度數組名.length; //獲取行數 數組名[行標].length; //獲取指定行的列數3. 二維數組多種定義方式只指定行數列可以后續分配只允許省略列不能省略行數據類型[][] 數組名; 數組名 new 數據類型[行數][];同時指定行列數據類型[][] 數組名 new 數據類型[行數][列數];初始化方式一數據類型[][] 數組名 new 數據類型[][]{{值1,值2},{值3,值4},{值5,值6}};行數由外層大括號內部{}數量決定每一行的列數由內層{}內部元素決定[][]中不能寫行列數字。簡寫初始化聲明和初始化必須同時寫數據類型[][] 數組名 {{值1,值2},{值3,值4},{值5,值6}};4. 不規則二維數組每一行擁有的列數不相等。 寫法 1int[][] arr; arr new int[3][]; arr[0] new int[2]; arr[1] new int[4]; arr[2] new int[1];寫法 2int[][] arr new int[][]{{1,2,3},{4},{5,6},{7}};寫法 3 簡寫int[][] arr {{1,2,3},{4},{5,6},{7}};