定义
在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识。
因为数据内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:
int[] array = {1,2,3,4,5};
知道了数组的数据起始地址Base Address,就可以由公式BaseAddress + i * size计算出索引i元素的地址。
- i即索引,在Java、C等语言都是从0开始的。
- size是每个元素占用字节,例如int占用4个字节,double占用8个字节。
小测试
byte[] array = {1,2,3,4,5};
已知array的数组其实地址是0x7138f94c8,那么元素3的地址是什么?
答:0x7138f94c8 + 2 * 1 = 0x7138f94ca
性能
空间占用
Java中数组结构为
- 8字节markword
- 4字节class指针(压缩class指针的情况)
- 4字节数组大小(决定了数组最大容量是2的32次方)
- 数组元素+对齐字节(Java中所有对象大小都是8字节的整数倍,不足的要用对齐字节补足)
例如
int[] array = {1,2,3,4,5};
的大小为40个字节,组成如下:
8 + 4 + 4 + 5*4 + 4(alignment)
所以数组的数据结构为:
随机访问 即根据索引查找元素,时间复杂度是O(1)