一、數組概念 可以將多個同一數據類型的數據,存儲到同一個容器中 1. 格式 數據類型[] 數組名=new 數據類型[元素個數] "數據類型"表示該數組中可以存放哪一類型的數據 "[]" 表示當前變數的數據類型為數組類型 "元素個數" 限制了當前數組中可以存放的數據個數 創建數組時,java系統自動設 ...
一、數組概念
可以將多個同一數據類型的數據,存儲到同一個容器中
1. 格式
- 數據類型[] 數組名=new 數據類型[元素個數]
- "數據類型"表示該數組中可以存放哪一類型的數據
- "[]" 表示當前變數的數據類型為數組類型
- "元素個數" 限制了當前數組中可以存放的數據個數
- 創建數組時,java系統自動設置各個元素的初始值,因此稱為靜態初始化
- 數據類型[] 數組名=new 數據類型[]{元素1,元素2,...}
- 以上方式在創建數組時,設置了各個元素的初始值,因此稱為動態初始化.
- 數據類型[] 數組名={元素1,元素2,...}
- 以上方式在創建數組時,設置了各個元素的初始值,因此稱為動態初始化.同時省掉了new關鍵字,直接創建數組,稱為直接量語法
2. 數組的操作
- 查詢數組中元素:數組名[索引]
- 修改數組中元素:數組名[索引]=值;
- 設置數組中的元素:數組名[索引]=值;
- 刪除數組中的元素:數組名[索引]=預設值;
二、 一維數組
1. 聲明與初始化
正確的方式:
int num;//聲明
num = 10;//初始化
int id = 1001;//聲明 + 初始化
int[] ids;//聲明
//1.1 靜態初始化:數組的初始化和數組元素的賦值操作同時進行
ids = new int[]{1001,1002,1003,1004};
//1.2動態初始化:數組的初始化和數組元素的賦值操作分開進行
String[] names = new String[5];
int[] arr4 = {1,2,3,4,5};//類型推斷
2. 一維數組的引用
//數組的角標(或索引從0開始的,到數組的長度-1結束。
names[0] = "王銘";
names[1] = "王赫";
names[2] = "張學良";
names[3] = "孫居龍";
names[4] = "王巨集志";//charAt(0)
3. 數組的屬性 length
System.out.println(names.length);//5
System.out.println(ids.length);
說明:
數組一旦初始化,其長度就是確定的。arr.length
數組長度一旦確定,就不可修改。
4. 一維數組的遍歷
for(int i = 0;i < names.length;i++){
System.out.println(names[i]);
}
5.一維數組元素的預設初始化值
- 數組元素是整型:0
- 數組元素是浮點型:0.0
- 數組元素是char型:0或'\u0000',而非'0'
- 數組元素是boolean型:false
- 數組元素是引用數據類型:null
6.一維數組的記憶體解析
三、二維數組
1.如何理解二維數組?
數組屬於引用數據類型
數組的元素也可以是引用數據類型
一個一維數組A的元素如果還是一個一維數組類型的,則,此數組A稱為二維數組。
2.二維數組的聲明與初始化
正確的方式:
int[] arr = new int[]{1,2,3};//一維數組
//靜態初始化
int[][] arr1 = new int[][]{{1,2,3},{4,5},{6,7,8}};
//動態初始化1
String[][] arr2 = new String[3][2];
//動態初始化2
String[][] arr3 = new String[3][];
//也是正確的寫法:
int[] arr4[] = new int[][]{{1,2,3},{4,5,9,10},{6,7,8}};
int[] arr5[] = {{1,2,3},{4,5},{6,7,8}};//類型推斷
3.如何調用二維數組元素:
System.out.println(arr[1][0]);//2
System.out.println(arr[1][1]);//null
arr3[1] = new String[4];
System.out.println(arr3[1][0]);
System.out.println(arr3[0]);//
4.二維數組的屬性:
System.out.println(arr4.length);//3
System.out.println(arr4[0].length);//3
System.out.println(arr4[1].length);//4
5.遍歷二維數組元素
for(int i = 0;i < arr4.length;i++){
for(int j = 0;j < arr4[i].length;j++){
System.out.print(arr4[i][j] + " ");
}
System.out.println();
}
6. 二維數組記憶體解析
四、數組常見演算法
1. 楊輝三角
// 1. 初始化二維而數組
int[][] arr1 = new int[10][];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = new int[i + 1];
// 給每行首位元素賦值
arr1[i][0] = arr1[i][i] = 1;
// 給每行非首位元素賦值
for (int j = 1; j < arr1[i].length - 1; j++) {
arr1[i][j] = arr1[i - 1][j - 1] + arr1[i - 1][j];
}
}
// 遍歷二維數組
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();
}
2. 冒泡排序
int[] arr = new int[]{43,32,76,-98,0,64,33,-21,32,99};
//冒泡排序
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 temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i] + "\t");
}
五、操作數組的工具類
//1.boolean equals(int[] a,int[] b):判斷兩個數組是否相等。
int[] arr1 = new int[]{1,2,3,4};
int[] arr2 = new int[]{1,3,2,4};
boolean isEquals = Arrays.equals(arr1, arr2);
System.out.println(isEquals);
//2.String toString(int[] a):輸出數組信息。
System.out.println(Arrays.toString(arr1));
//3.void fill(int[] a,int val):將指定值填充到數組之中。
Arrays.fill(arr1,10);
System.out.println(Arrays.toString(arr1));
//4.void sort(int[] a):對數組進行排序。
Arrays.sort(arr2);
System.out.println(Arrays.toString(arr2));
//5.int binarySearch(int[] a,int key)
int[] arr3 = new int[]{-98,-34,2,34,54,66,79,105,210,333};
int index = Arrays.binarySearch(arr3, 210);
if(index >= 0){
System.out.println(index);
}else{
System.out.println("未找到");
}
六、數組中的常見異常
//1. 數組角標越界的異常:ArrayIndexOutOfBoundsExcetion
int[] arr = new int[]{1,2,3,4,5};
// for(int i = 0;i <= arr.length;i++){
// System.out.println(arr[i]);
// }
// System.out.println(arr[-2]);
// System.out.println("hello");
//2.2. 空指針異常:NullPointerException
//情況一:
// int[] arr1 = new int[]{1,2,3};
// arr1 = null;
// System.out.println(arr1[0]);
//情況二:
// int[][] arr2 = new int[4][];
// System.out.println(arr2[0][0]);
//情況三:
String[] arr3 = new String[]{"AA","BB","CC"};
arr3[0] = null;
System.out.println(arr3[0].toString());