数组
在java中,数组是一种引用数据类型
-
数组中可以存储基本数据,也可以存储引用数据类型(存储其地址)
-
数组一旦创建,长度不可变
-
数组自带length属性
-
数组中的元素类型要统一
-
数组的初始化
- 静态:int[] arr={1,2,3};
- 动态:int[] arr=new int[3];
3表示数组的元素个数
-
方法的参数可以是一个数据,在调用方法时,如果想直接传入一个静态数组:(不能直接传{1,2,3})
func(new int[]{1,2,3})
引用数据类型数组
以Animal,Cat,Car类(Cat为Animal的子类)为例
Animal[] animal=new Animal[3];
animal[0]= new Animal() //这样没问题
animal[1]= new Cat() //这样也没问题
animal[2]= new Car() //这样就不行了
Animal数组中可以放Animal对象,也可以放Animal的子类,但不能放其他与之无关的对象
数组扩容
java中的数组满了需要扩容的原理:创建一个大的数组,将原来的数组中的内容拷贝到新的数组中。
拷贝方法:System.arrycopy(五个参数)
第一个参数:原数组
第二个参数:开始拷贝的位置
第三个参数:目的数组
第四个参数:拷贝到目的数组中的起始位置
第五个参数:拷贝的长度
如果拷贝的位置有元素,则会覆盖掉原来的元素
面试题
为什么数组的检索效率最高???
一般回答:因为数组有下标
高分回答:因为数组的地址就是数组的第一个元素的地址,每个元素都是连续存储的,而且每个元素的大小是一样的,根据所查元素相对于第一个元素的偏移量,就可以计算出所查元素的地址,直接定位到这个元素了。