概述
概述
什么是数组
在 Java 中,数组是一种用于存储多个相同数据类型元素的容器
例如一个存储整数的数组:
int[] nums = {100, 200, 300};
例如一个存储字符串的数组:
String[] names = {“jack”,“lucy”,“lisi”};
数组是一种引用数据类型,隐式继承
Object
。因此数组也可以调用Object
类中的方法数组对象存储在堆内存中
数组的分类
根据维数进行分类:一维数组,二维数组,三维数组,多维数组
根据数组中存储的元素类型分类:基本类型数组,引用类型数组
根据数组初始化方式不同分类:静态数组,动态数组
Java 数组存储元素的特点
数组长度一旦确定不可变
数组中元素数据类型一致。既然数据类型一致,那么每个元素占用空间大小相同
数组中每个元素在空间存储上,内存地址是连续的
每个元素有索引,首元素索引为 0,以 1 递增
以首元素的内存地址作为数组对象在堆内存中的地址(因为每个元素在空间存储上,内存地址是连续的,所以只需要知道首元素的内存地址即可推断出后续元素的内存地址)
所有数组对象都有
length
属性用来获取数组元素个数。末尾元素下标:length-1
数组的优点
根据下标查询某个元素的效率极高。不管数组中有 100 个元素还是有 100 万个元素,查询效率相同。时间复杂度为 O(1)。也就是说在数组中根据下标查询某个元素时,不管数组的长短,耗费的时间是固定不变的
原因:知道首元素的内存地址,元素在空间存储上内存地址又是连续的,每个元素占用空间大小相同。因此只要知道下标,就可以通过数学表达式计算出来要查找的元素的内存地址,从而直接通过内存地址定位元素
数组的缺点
随机增删元素的效率较低。因为随机增删元素时,为了保证数组中元素的内存地址连续,就需要涉及到后续元素的位移问题。时间复杂度为 O(n)。O(n) 表示的是线性阶,随着问题规模 n 的不断增大,时间复杂度不断增大,算法的执行效率越低(不过要注意的是:对于数组的末尾元素的增删效率是不受影响的)