数组的概述
一维数组
数组元素可以是普通数据类型,也可以是引用数据类型。
1.初始化声明
int[] nums ;//声明
//静态初始化
nums = new int[]{1001,1002,1003};
//动态初始化
String[] names = new String[5];
2.数组长度
nums.length
3.默认初始化值:
int byte short long 类型 默认为 0
float double 类型 默认为0.0
char 类型 默认 0的ASIIC码(如果输出什么都没有)
用if判断 ==0,是成立的
boolean 类型 默认 false
引用数据类型
4.内存简化结构
左边是栈,右边是堆。arr1指向了新的空间,原来的空间就在一定时间后被回收。(但是这个String放在常量池,先这么理解指向,不要看String,后面在解释String)
多维数组
1.二维数组初始化
arr3只指明了一维数组的长度,所以不能直接调用,会出现空指针异常。用下面这种方式可以给没指明二维数组长度的数组设定长度。
2.默认值
外层元素的初始化为:地址值
内层元素初始化值为:与一维数组类型对应
此时,只给出一维数组,对应的二维数组没有。所有找不到二维数组的地址值,就是null
外层元素初始化值:null
内层元素:没有初始化过,报空指针异常
3.二维数组内存解析
说明:int x,y---->int [] x,y等价于[]对xy都有用
int[] x,y[] 等价于 int[]x int []y[] ,所以x是一维数组,y是二维数组。
练习:
1.杨辉三角形
在定义二维数组的时候,由于每个数组的第二维度都不一样,所以不指定。在下面重新new不同长度的一维数组。然后第一列和,最后一斜着的列赋值为1.当到达第三列再利用公式计算。
2.回环数
3.随机数
先把范围变为[]闭区间,[a,b]
公式:(int)(Math.random()*(b-a+1)+a)
4.数组复制操作
会发现,虽然操作的是数组二,但是再次打印数组一的时候。数值发生了变化。原因如下图:
如果用下面的方法复制,就不会指向同一个地址,num1和nums2的值就不一样。
public static void main(String args[]){
int []nums1 = new int[]{1,2,3,4,5};
int []nums2 = new int[5];
//nums2 = nums1;
for (int i = 0;i<nums1.length;i++) {
if(i%2==0)
nums2[i] = i;
else
nums2[i] = nums1[i];
}
System.out.println("num1");
for (int i = 0;i<nums1.length;i++){
System.out.print(nums1[i]+" ");
}
System.out.println("\nnum2");
for (int i = 0;i<nums2.length;i++){
System.out.print(nums2[i]+" ");
}
}
num1
1 2 3 4 5
num2
0 2 2 4 4
数组反转
Array工具类
例如:
fill会将原来所有的值,都改为传入的值
binarySearch找到返回下标,为找到返回负数
数组常见的异常:
1.数组越界异常
2.空指针异常