一、數組的概念
數組概念: 數組就是用于存儲數據的長度固定的容器,保證多個數據的數據類型要一致。
? ? ? ? ? ? ? ? ? ?按照維度區分:一維數組:存儲一組數據。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 二維數組:存儲多組數據。
? ? ? ? ? ? ? ? ? ? 按照元素類型區分:基本數據類型的元素:存儲數據值
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?引用數據類型的元素:存儲對象(本質上存儲對象的首地址)
數組的定義:元素的數據類型[ ]? 數組名(推薦使用)
? ? ? ? ? ? ? ? ? ? ? 元素的數據類型 數組名[ ]
? ? ? ? ? ? ? ? ? ? ? 一個數組要包含數組的維度、數組的元素類型、數組名。
? ? ? ? ????????????????//比如,要存儲一個小組的成績
? ? ? ? ? ? ? ? ? ? ? ? //int[ ] scores;;
數組的初始化:靜態初始化有三種:1.數據類型[] 數組名 = {元素1,元素2,元素3...};
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????? ?//int[ ] arr = {1,2,3,4,5};
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2. 數據類型[] 數組名 = new 數據類型[]{元素1,元素2.};
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????? //int[] arr = new int[]{1,2,3,4,5};
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?3. 數據類型[] 數組名;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?數組名 = new 數據類型[]{元素1,元素2,元素3...};
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? //int[] arr;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? arr = new int[]{1,2,3,4,5};
? ? ? ? ? ? ? ? ? ? ? ? ?動態初始化有一種:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 數組存儲的元素的數據類型[] 數組名 = new 數組存儲的元素的數據類型[長度];
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????? //int[] arr = new int[5];
數組的使用:數組在使用時一般是對數組進行遍歷,在遍歷時要注意幾點:
? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.數組的長度屬性
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.數組下標越界異常
? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.數組的下標是從0開始,到length-1結束。
? ? ? ? ? ? ? ? ? ? ????????4.由于數組是引用數據類型,記錄了數組的地址,當把一個數組賦值給另一個數組時,兩個數組此時指向同一個地址,因此兩個數組相等。
二、數組的常見算法
第一類:求總和、求總乘積等
? ? ? ? 一般思想是通過定義一個變量,在遍歷數組的過程中將數組中的每個元素累加到此變量上,在遍歷完成后打印輸出結果。
//? ? ? ? ? ? ? ? ? int[] arr = {4,5,6,1,9};
? ? ? ? ????????????//求總和、均值
? ? ? ? ????????????int sum = 0;//因為0加上任何數都不影響結果
? ? ? ? ????????????for(int i=0; i<arr.length; i++){
? ? ? ? ? ????????????????? sum += arr[i];
? ? ? ????????????? }
????????????????????System.out.println("sum = " + sum);
第二類:統計數組內特殊數值的個數(包括最大最小值)
? ? ? ? 一般思想為定義一個初始值為0的記錄變量,在遍歷數組時通過一個if判斷語句去判斷此數值時候符合特殊條件,若符合則讓記錄變量自增,遍歷結束打印。
? ? ? ? 若為求最大最小值,則定義一個變量取數組首項假設為最大最小值,將if語句條件改變為對比條件即可,當符合時使用記錄變量記錄此項下標,遍歷結束打印。
????????//? ? ? ? ? ? ? ? ? ? ? int[] arr = {4,5,6,1,9};
? ? ? ? ????????????????????????????//統計偶數個數
? ? ? ? ????????????????????????int evenCount = 0;
? ? ? ????????????????????????? for(int i=0; i<arr.length; i++){
? ? ? ? ? ?????????????????????????????if(arr[i]%2==0){
? ? ? ? ? ? ?????????????????????????????????evenCount++;
? ? ? ? ? ? ????????????????????????????}????
? ? ? ????????????????????????? }
? ? ? ? ????????????????????????System.out.println("evenCount = " + evenCount);
? ? ? ?//? ? ? ? ? ? ? ? ? ? ? ?int[] arr = {4,5,6,1,9};
? ? ? ????????????????????????????? //找最大值
? ? ????????????????????????? ? int max = arr[0];
? ? ? ????????????????????????? for(int i=1; i<arr.length; i++){
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?if(arr[i] > max){
? ? ? ? ? ? ? ????????????????????????????????????? max = arr[i];
? ? ? ? ? ????????????????????????????????? }
? ? ? ? ????????????????????????????}
? ? ? ? ????????????????????????????System.out.println("max = " + max);
第三類:數組的元素查找
? ? ? ? 一般思想為對數組進行遍歷,依次對比所需值是否匹配,不同算法時間復雜度和空間復雜度不同。
? ? 1.順序查找
? ? ? ? 一般思想為從下標0開始挨個對比,對數組元素順序無要求。
? ? 2.折半查找
? ? ? ? 一般思想為每次對比數組下標為中間值的元素,若此時中間值大于所需值則去往數組左半部分查找,若中間值小于所需值則往數組右半部分查找,對數組元素要求有序排列。
第四類:數組的元素排序
? ? ? ? 一般思想為進行n輪循環,n與數組長度有關,每次循環確定一個元素的最終位置。
? ? ? ? 1.選擇排序
? ? ? ? ? ? 選擇排序思想為兩層for循環嵌套,第一層for控制總循環次數,本質是每次循環需要確定一個元素的最終位置,第二層for是為了選擇出本次需要確定最終位置的元素,若確定的元素此時不在最終應當在的位置,則將此元素交換至最終位置。
? ? ? ? 2.冒泡排序
? ? ? ? ? ? 冒泡排序思想為每次比較相鄰的兩個元素,若位置不對則交換,每一趟可以將一個元素確定到數組的邊緣位置,類似于一個一個泡泡往前冒,若某一趟未發生一次交換,則說明數組內元素已經有序。