数组
数组
定义
多个相同类型的数据按照一定顺序排列的集合,并且用一个名字命名,并通过编号方式对这些数据进行统一管理
要素
- 数组名
- 元素
- 索引(角标、下标)
- 数组长度(元素个数)
特点
- 有序排列
- 属于引用数据类型
引用类型一般都是通过new关键字创建对象,然后把这个对象赋予给相应的变量
- 数组的元素类型可以是可以是基本数据类型,也可以是引用数据类型
- 创建数组所占的内存空间是连续的
- 数组的长度一旦确定,就不可以修改
分类
维数
- 一维数组
- 多维数组
元素
- 基本数据类型元素的数组
- 引用数据类型元素的数组
一维数组
声明和初始化
初始化结束,数组的长度就确定了
两种初始化方式
- 确定数组长度
- 确定了数组中的元素

调用指定位置的元素
通过角标的方式调用

注意
- 数组的角标从0开始,到n-1结束
- 不可以超出角标范围
获取数组长度
length属性

遍历数组
利用for循环
- 初始条件是i = 0(数组的下标从0开始)
- 循环条件是比数组长度小

数组元素的默认初始化值
- 整型默认初始化值都为0
- 浮点型默认初始化的值为0.0
- char型默认初始化值为0或'\u000'(不是'0')
- 布尔类型默认初始化值为false
- 引用数据类型默认初始化的值为null
多维数组(常见二维数组)
从数组底层的运行机制来看,其实没有多维数组
二维数组
数组组成的数组(一个数组每个元素都是数组)
声明和初始化
前面的[ ]有数字,后面[ ]的可以有可以没有
堆空间里面先加载第一个数组框,数组框里面的元素填第二个数组,所以第一个[ ] 必须加载内容,第二个框才可能有内容

调用指定位置的元素
角标方式调用
获取数组长度
只要是数组就会有length属性
- arr.length---外层元素个数
- arr[n].length---内层元素个数(其中的n表示第n个外层元素,可以得到他的内层元素的个数)

遍历数组
双重循环[i][j]
- 第一层遍历前面的i
- 第二层遍历后面的j(j长度小于arr[i].length)

数组元素的默认初始化值
- 规定:二维数组分为外层数组元素,内层数组元素
- 注意是数值还是地址值
分为两种情况
- 前后都赋值了
- 外层初始化值-------地址值
- 内层初始化值-------与该数组对应的一维数组初始化相同
- 前赋值后没有赋值
- 外层初始化值-----null
二维数组中内层数组代表该外层数组中的元素是数组,没有定义划分,所以外层 也就为空,没有被初始化
- 内层初始化值----不能调用,出错
Arrays工具类
- boolean equals(int[] a,int[] b):判断两个数组是否相等
- String toString(int[] a):输出数组信息
- void fill(int[] a,int val):将指定的值填充到数组当中(将数组中的所有元素替换成你输入的元素)
- void sort(int[] a):对数组进行排序
- int binarySearch(int[] a,int key):二分查找,能找到返回他的位置,找不到返回一个负数
int[] a = new int[]{1,2,3};
int[] b = new int[]{1,2,3};
int[] c = new int[]{1,2,3,4};
int[] d = new int[]{97,81,16,103};
//1. boolean equals(int[] a,int[] b):判断两个数组是否相等
System.out.println(Arrays.equals(a,b));//true
System.out.println(Arrays.equals(a,c));//false
//2. String toString(int[] a):输出数组信息
System.out.println(Arrays.toString(a));//[1, 2, 3]
//3. void fill(int[] a,int val):将指定的值填充到数组当中(将数组中的所有元素替换成你输入的元素)
Arrays.fill(b,56);
System.out.println(Arrays.toString(b));//[56, 56, 56]
//4. void sort(int[] a):对数组进行排序
Arrays.sort(d);
System.out.println(Arrays.toString(d));//[16, 81, 97, 103]
//5. int binarySearch(int[] a,int key):二分查找,能找到返回他的位置,找不到返回一个负数
int i = Arrays.binarySearch(d, 97);
int j = Arrays.binarySearch(d, 1);
System.out.println("97的位置" + i);//97的位置2
System.out.println("1的位置" + j);//1的位置-1
运行结果

常见异常
- 空指针
- 超出范围
常见问题
-
arr1 = arr2
- 把arr2的地址值赋给了arr1
- 不能称作数组的复制
-
反转问题(交换两个变量值的问题)
a与b的值进行交换
设一个中间变量c
c = a
a = b
b = c

浙公网安备 33010602011771号