DAY5
1. 数组
定义: 存储多个同一种数据类型的元素的集合(容器).
好处: 元素会具备索引,方便操作.
特点:
1) 可以存储基本数据类型, 也可以存储引用数据类型.
2) 一个数组只能存放同一种数据类型.
3) 数组的长度固定.
格式:
元素类型[] 数组名 = new 元素类型[长度];
直接打印数组的引用:
看到数组在内存中的地址值的十六进制表示形式.
获取元素格式:
数组名[索引]
备注:索引是从0开始的.
3. 内存
栈:
栈的特点:先进后出(弹夹)
局部变量 -- 方法的参数中的变量或者方法体中变量
特点:使用完毕自动消失.
堆:
new 建立的实例
都有默认值:
整形 : 0
浮点型 : 0.0
字符型 : '\u0000' (空字符'')
boolean : false
引用数据类型 : null
会在变成垃圾后(没用引用指向),被垃圾回收器不定时(自动)的回收.
注意:
每new一次,申请的内存空间的地址值都是不一样的.
多个引用可以指向同一个实例(对象)
4. 数组的定义方式
静态初始化:
数据类型[] 变量名 = new 数据类型[]{元素1, 元素2, 元素3, ...};
简写:
数据类型[] 变量名 = {元素1, 元素2, 元素3, ...};
数组操作的常见问题:
A:数组越界异常。访问了不存在的索引。
ArrayIndexOutOfBoundsException
B:空指针异常。一个实例(对象)已经不存在了,还去访问它的内容。
NullPointerException
5. 数组常见操作
1) 遍历
数组有一个属性,可以获取数组的长度
数组名.length;
for (int x = 0; x < arr.length; x++)
{
System.out.println(arr[x]);
}
2) 数组操作之获取最值
思路:
1) 定义变量,记录每次比较后较大的值.
2) 遍历数组,拿到每个元素,与变量记录的值进行比较,如果发现遍历到的值更大,就把这个值赋给变量.
3) 遍历结束,变量就是记录的最大值.
public static int getMax(int[] arr) {
int maxValue = arr[0];
for (int x = 1; x < arr.length; x++) {
if (arr[x] > maxValue) {
maxValue = arr[x];
}
}
return maxValue;
}
3) 基本查找
思路:
1)遍历数组,拿每一个元素与想找的值进行比较,一旦匹配,返回该值索引.
2)遍历结束,如果没有,返回-1.
public static int search(int[] arr, int key) {
for (int x = 0; x < arr.length; x++) {
if (arr[x] == key) {
return x;
}
}
return -1;
}
6. 二维数组
定义格式1: 数据类型[][] 变量名 = new 数据类型[n][m];
二维数组中存储的其实是每一个一维数组的地址值.
定义格式2: 数据类型[][] 变量名 = new 数据类型[n][];
再对每一个一维数组进行初始化
定义格式3: 数据类型[][] 变量名 = { {1,2},{3,4,5} ,{6,7,8,9} ,{0} };
遍历二维数组的思路:
外循环遍历二维数组,得到每一个一维数组,内循环遍历一维数组.
注意事项:
数组的长度不要数.通过数组的length属性获取.
7.形参的改变会影响实参吗
形参 -- 方法声明中的参数
实参 -- 实际参与运算的参数
对于基本数据类型,不会影响,因为传递的是值.
对于引用数据类型,会影响,因为传递的是地址值,是多个引用指向了同一个对象.
(有特例 -- String Integer)
|
|