轉載請注明出處:http://www.lxweimin.com/p/92fbad32cacd
1.數組概念
* 數組是存儲同一種數據類型多個元素的集合。也可以看成是一個容器。
* 數組既可以存儲基本數據類型,也可以存儲引用數據類型。
數組定義格式
數據類型[] 數組名 = new 數據類型[數組的長度];
2.數組的初始化
(1)數組的初始化
* 就是為數組開辟連續的內存空間,并為每個數組元素賦予值
如何對數組進行初始化
* a:動態初始化 只指定長度,由系統給出初始化值
* int[] arr = new int[5];
* b:靜態初始化 給出初始化值,由系統決定長度
(2)動態初始化
* 數據類型[] 數組名 = new 數據類型[數組長度];
(3)靜態初始化
* 格式:數據類型[] 數組名 = new 數據類型[]{元素1,元素2,…};
* 簡化格式:
* 數據類型[] 數組名 = {元素1,元素2,…};
3.內存分配以及堆與棧的區別
- A:棧(掌握)
- 存儲局部變量
- B:堆(掌握)
- 存儲new出來的數組或對象
- C:方法區
- 面向對象部分講解
- D:本地方法區
- 和系統相關
- E:寄存器
- 給CPU使用
4.數組操作的兩個常見小問題:越界和空指針
* a:ArrayIndexOutOfBoundsException:數組索引越界異常
* 原因:你訪問了不存在的索引。
* b:NullPointerException:空指針異常
* 原因:數組已經不在指向堆內存了。而你還用數組名去訪問元素。
* int[] arr = {1,2,3};
* arr = null;
* System.out.println(arr[0]);
5.數組的操作
(1)遍歷:
public static void print(int[] arr) {
for (int i = 0;i < arr.length ;i++ ) {
System.out.print(arr[i] + " ");
}
}
(2)獲取最值:
public static int getMax(int[] arr) {
int max = arr[0];
for (int i = 1;i < arr.length ;i++ ) {
if (max < arr[i]) {
max = arr[i];
}
}
return max;
}
(3)數組元素反轉:
public static void reverseArray(int[] arr) {
for (int i = 0;i < arr.length / 2 ; i++) {
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}
}
(4)數組查表法(根據鍵盤錄入索引,查找對應星期):
public static char getWeek(int week) {
char[] arr = {' ','一','二','三','四','五','六','日'}; //定義了一張星期表
return arr[week]; //通過索引獲取表中的元素
}
(5)數組元素查找:
public static int getIndex(int[] arr,int value) {
for (int i = 0;i < arr.length ;i++ ) {
if (arr[i] == value) {
return i;
}
}
return -1;
}
6.二維數組
格式1 int[][] arr = new int[3][2];
格式2 int[][] arr = new int[3][];
格式3 int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
以下格式也可以表示二維數組
* 1:數據類型 數組名[][] = new 數據類型[m][n];
* 2:數據類型[] 數組名[] = new 數據類型[m][n];
7.參數傳遞問題:
(1)基本數據類型的值傳遞,不改變原值,因為調用后就會彈棧,局部變量隨之消失
(2)引用數據類型的值傳遞,改變原值,因為即使方法彈棧,但是堆內存數組對象還在,可以通過地址繼續訪問