一:目標
1.數(shù)組的定義和特點
2.數(shù)組的操作(存數(shù)據(jù),取數(shù)據(jù),遍歷數(shù)據(jù))
3.二維數(shù)組(定義,取,存,遍歷)
二:知識點
1.數(shù)組
1.數(shù)組概述:是一個容器,數(shù)組本身屬于引用數(shù)據(jù)類型
2.作用:一次存儲多個數(shù)據(jù)
3.特點:
a.既可以存儲基本類型的數(shù)據(jù),還能存儲引用類型的數(shù)據(jù)
b.定長(定義數(shù)組時長度為多長,最多就能存多少個數(shù)據(jù))
4.定義:
a.動態(tài)初始化:
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[長度]
數(shù)據(jù)類型 數(shù)組名[] = new 數(shù)據(jù)類型[長度]
各部分解釋:
等號左邊的數(shù)據(jù)類型:規(guī)定了數(shù)組中只能存儲什么類型的元素
[]:代表的是數(shù)組,一個[]代表一維數(shù)組,兩個[][]代表二維數(shù)組
數(shù)組名:自己取的名字,遵循小駝峰
new:代表的是創(chuàng)建數(shù)組
等號右邊的數(shù)據(jù)類型:要和等號左邊的數(shù)據(jù)類型一致
[長度]:指定數(shù)組長度,規(guī)定了數(shù)組最多能存多少個數(shù)據(jù)
b.靜態(tài)初始化
數(shù)據(jù)類型[] 數(shù)組名 = new 數(shù)據(jù)類型[]{元素1,元素2...} -> 不推薦使用
數(shù)據(jù)類型 數(shù)組名[] = new 數(shù)據(jù)類型[]{元素1,元素2...} -> 不推薦使用
c.簡化的靜態(tài)初始化:
數(shù)據(jù)類型[] 數(shù)組名 = {元素1,元素2...}-> 推薦使用
5.區(qū)別:
a.動態(tài)初始化:定義的時候只指定了長度,沒有存具體的數(shù)據(jù)
當只知道長度,但不知道具體存啥數(shù)據(jù)時可以使用動態(tài)初始化
b.靜態(tài)初始化:定義的時候就直接知道存啥了
定義
//動態(tài)初始化
int[] intArr = new int[5];
String[] strArr = new String[20];
//靜態(tài)初始化
String[] strings = new String[]{"第一個","第二個","第三個","第四個"};
System.out.println("strings = " + Arrays.toString(strings));
//簡化靜態(tài)初始化 ---- > 推薦
String[] strings1 = {"aaa","bbb","ccc","ddd","eee"};
System.out.println("strings1 = " + Arrays.toString(strings1));
獲取數(shù)組長度
System.out.println("intArr.length = " + intArr.length);
System.out.println("strArr.length = " + strArr.length);
System.out.println("strings.length = " + strings.length);
System.out.println("strings1.length = " + strings1.length);
存取值以及遍歷
strings[0] = "ppp";
//遍歷數(shù)組
for (int i = 0; i < strings.length; i++) {
System.out.println("strings["+i+"] = " + strings[i]);
}
注意
注意:
a.直接輸出數(shù)組名,會直接輸出數(shù)組在內(nèi)存中的地址值
b.如果數(shù)組中沒有存元素,那么直接獲取索引上對應的元素也是有值的,只不過不是我們存儲的數(shù)據(jù),而是數(shù)組中的元素默認值
元素的默認值:
整數(shù): 0
小數(shù): 0.0
字符: '\u0000' -> 空白字符 -> 對應的int值是0
布爾: false
引用: null
2.內(nèi)存
2.分為哪5大塊
棧(重點)(Stack)
主要運行方法,方法的運行都會去棧內(nèi)存中運行,運行完畢之后,需要"彈棧",騰空間
堆(重點):(Heap)
每new一次,都會在堆內(nèi)存中開辟空間,并為此空間自動分配一個地址值
堆中的數(shù)據(jù)都是有默認值的
整數(shù):0
小數(shù):0.0
字符: '\u0000'
布爾:false
引用:null
方法區(qū)(重點)(Method Area)
代碼的"預備區(qū)",記錄了類的信息以及方法的信息
本地方法棧(了解):專門運行native方法(本地方法)
本地方法可以理解為對java功能的擴充
有很多功能java語言實現(xiàn)不了,所以就需要依靠本地方法完成
寄存器(了解) -> 跟CPU有關(guān)
注意:
1.我們創(chuàng)建了兩個數(shù)組,在堆內(nèi)存中開辟了兩個不同的空間,此時修改一個數(shù)組中的元素不會影響到另外一個數(shù)組中的數(shù)據(jù)
2.arr2不是new出來的,是arr1直接賦值的,arr1在內(nèi)存中保存的是地址值,給了arr2,那么arr2的地址值和arr1就是一樣的
所以此時arr1和arr2指向了堆內(nèi)存中的同一片空間(同一個地址值,同一個數(shù)組),此時改變一個數(shù)組中的元素會影響到另外一個數(shù)組
3.二維數(shù)組
//二維數(shù)組 初始化
//動態(tài)初始化
int [][] intArray = new int[3][3];
String [][] stringArray = new String[3][3];
//靜態(tài)初始化
int[][] intArray2 = {{1,2,3},{4,5,6},{7,8,9}};
String [][] stringArray2 = {{"a","b"},{"c","d"}};
System.out.println("intArray2 = " + Arrays.deepToString(intArray2));
System.out.println("stringArray2 = " + Arrays.deepToString(stringArray2));
//獲取數(shù)組長度 length
System.out.println("intArray2.length = " + intArray2.length);
System.out.println("intArray2[0].length = " + intArray2[0].length);
System.out.println("stringArray2.length = " + stringArray2.length);
System.out.println("stringArray2[0].length = " + stringArray2[0].length);
for (int[] temp : intArray2) {
for (int i : temp) {
System.out.print(i + " ");
}
}
for (String[] strings : stringArray2) {
for (String string : strings) {
System.out.print(string + " ");
}
}
//二維數(shù)組存數(shù)據(jù)
stringArray2[0][1] = "哈哈哈";
intArray2[2][0] = 999;
//取數(shù)據(jù)
System.out.println("stringArray2[0][1] = " + stringArray2[0][1]);
System.out.println("intArray2[2][0] = " + intArray2[2][0]);
//遍歷數(shù)組
for (int i = 0; i < stringArray2.length; i++) {
String[] temp = stringArray2[i];
for (int j = 0; j < temp.length; j++) {
System.out.println("temp[j] = " + temp[j]);
}
}
int[][] arr1 = new int[3][];
arr1[1] = new int[]{1,2,3};
arr1[2] = new int[3];
arr1[2][1] = 100;
// System.out.println("arr1[0].length = " + arr1[0].length); null //數(shù)組引用數(shù)據(jù)類型 默認值為null
System.out.println("arr1[1].length = " + arr1[1].length);
System.out.println("arr1[2].length = " + arr1[2].length);