一、數組的特點、好處及使用步驟
1、數組的好處
特點:相當於用於保存一組元素的容器
好處:
1、提高代碼的簡潔性和擴展性,且同時開辟多個空間,提高了效率
2、分類存儲,且空間是連續的,容易查找
2、數組的特點
1、數組存儲的是相同類型的一組元素
double[] arr = {1.6,2.3,1,2,'a'};
2、數組的定義類型可以是任意類型,包含基本類型或引用類型
String[] arr = {"john","lucy"};
Person[] arr;
int[][] arr;
Person[][] arr;
3、數組本身也屬於引用類型,內存的分配和基本類型不同
基本類型:值和變量名都存儲在棧中
引用類型:值存儲在堆中,變量名存儲在棧中
值又稱為對象,值中每個元素稱為成員
變量名又稱為數組名或對象名或引用名
3、數組的四要素
數據類型:任意類型[]
數組名
值(對象)
★下標 :從0開始
注意:訪問某個具體的成員,需要通過:數組名[下標]的方式!
4、數組的使用步驟★
(1)數組的動態初始化
(1)聲明
數據類型[] 數組名;或
數據類型 數組名[];
(2)開辟空間
數組名 = new 數據類型[長度];//長度必不可少
(3)手動賦值
數組名[下標] = 值;
(4)使用(打印、運算、判斷等)
System.out.println(數組名[下標]);
(2)數組的靜態初始化
(1)聲明並初始化
數據類型[] 數組名 = new 數據類型[]{值,值,值};
或 數據類型[] 數組名 = {值,值,值};
int[] arr = {3,4,5,6,100};
int[] arr2 = new int[] {3,4,5,6,100};
(2)使用
for(int i=0;i<數組名.length;i++){
//每一個元素表示為:數組名[i]
}
(3)注意事項
①數組的元素如果不賦值,也有默認值
int 0
double 0.0
char \u0000
boolean false
引用類型 null
②訪問數組的元素時,下標必須在0—長度-1 的范圍內,否則報數組下標越界的異常
③數組的長度,可以通過 數組名.length表示,提高代碼的維護性
④數組的賦值和使用,往往可以通過搭配for循環一起操作
for(int i=0;i<數組名.length;i++){
//每一個元素表示為:數組名[i]
}
二、數組的基本及高級使用
功能 | 代碼 | 功能 | 代碼 | |
基本使用 | 正序打印 |
for(int i=0;i<arr.length;i++){ System.out.println(arr[i]); } |
倒序打印 |
for(int i=arr.length-1;i>=0;i--){ System.out.println(arr[i]); } |
求和、求平均 |
int sum = 0; for(int i=0;i<arr.length;i++){ sum+=arr[i]; } 和:sum 平均值:sum/arr.length |
查找 |
int index=-1; for(int i=0;i<arr.length;i++){ if(arr[i]==帶查找的元素){ index = i; break; } } if(index==-1){//沒找到}else{找到了} |
|
求最值 |
int max = arr[0]; int indexMax = 0; int min = arr[0]; int indexMin = 0; for(int i=1;i<arr.length;i++){ if(arr[i]>max){ max = arr[i]; indexMax = i; } if(arr[i]<min){ min = arr[i]; indexMin = i; } } 最大值:max 最小值:min |
排序(冒泡) |
for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int t = arr[j]; arr[j] = arr[j+1]; arr[j+1]=t; } } |
|
復雜使用 | 賦值(傳統方式=arr) |
newArr = arr; |
循環賦值 |
①創建新數組,長度=舊數組.length int[] newArr = new int[arr.length]; ②循環將舊數組的元素依次賦值給新數組的每個成員 for(int i=0;i<newArr.length;i++){ newArr[i] = arr[i]; } |
反轉(方式1) |
for(int i=0;i<arr.length/2;i++){ //交換兩個數 arr[i] vs arr[arr.length-1-i] } |
反轉(方式2) |
①創建新數組,長度=舊數組.length int[] newArr = new int[arr.length]; ②循環賦值 for(int i=0,j=arr.length-1;i<arr.length;i++,j--){ newArr[i] = arr[j]; } ③將新數組的地址賦值給舊數組 arr = newArr; |
|
高級使用 | 追加元素 |
假如待添加的元素:add ①創建一個新數組,長度為 arr.length+1 int[] tempArr = new int[arr.length+1]; ②循環賦值(將arr的元素依次賦值給tempArr) for(int i=0;i<arr.length;i++){ tempArr[i] = arr[i]; } 補充:前兩步可以使用 int[] tempArr=Arrays.copyOf(arr,arr.length+1);代替 ③將add添加到最后一個空位上 tempArr[tempArr.length-1] = add; ④將tempArr的地址賦值給arr arr = tempArr; |
插入元素 |
待添加的元素:add 待插入的位置:index ①創建一個新數組,長度為 arr.length+1 int[] tempArr = new int[arr.length+1]; ②循環賦值(將arr的元素依次賦值給tempArr) for(int i=0;i<arr.length;i++){ tempArr[i] = arr[i]; } 補充:前兩步可以使用 int[] tempArr=Arrays.copyOf(arr,arr.length+1);代替 ③循環后移 for(int i=tempArr.length-1;i>index;i--){ tempArr[i] = tempArr[i-1]; } ④將add添加到index上 tempArr[index] = add; ⑤將tempArr的地址賦值給arr arr = tempArr; System.out.println("插入成功!"); |
三、二維數組
1、理解
二維數組本身也屬於引用類型,保存的也是地址號
二維數組用於保存多個一維數組的容器,相當於多個一維數組的組合,即二維數組中的每個元素又是一個一維數組
2、數組的使用步驟
(1)動態初始化
(1)聲明
數據類型[][] 數組名;
或
數據類型[] 數組名[];
或
數據類型 數組名[][];
(2)開辟空間
格式一:固定列數
數組名 = new 數據類型[行數][列數];//行數相當於二維數組的長度或一維數組的個數,列數相當於每個一維數組中的成員個數
格式二:不固定列數
數組名 = new 數據類型[行數][];
前兩步可以合二為一
語法示例:
int[][] arr = new int[5][];
(3)賦值
格式一:固定列數
for(int i=0;i<數組名.length;i++){
for(int j=0;j<數組名[i].length;j++){
數組名[i][j] = 值;
}
}
格式二:不固定列數
for(int i=0;i<數組名.length;i++){
數組名[i]=new 數據類型[長度];//長度不能省略!
for(int j=0;j<數組名[i].length;j++){
數組名[i][j] = 值;
}
}
(4)使用
for(int i=0;i<數組名.length;i++){
for(int j=0;j<數組名[i].length;j++){
System.out.println(數組名[i][j]);
}
}
(2)靜態初始化
(1)聲明並初始化
數據類型[][] 數組名 ={{值,值},{值,值,值}};或
數據類型[][] 數組名 =new 數據類型[][]{{值,值},{值,值,值}};
(2)使用
for(int i=0;i<數組名.length;i++){
for(int j=0;j<數組名[i].length;j++){
System.out.println(數組名[i][j]);
}
}