02-数据结构与算法值之数组

23 阅读1分钟

定义

在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识。

因为数据内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:

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)

所以数组的数据结构为:

image.png

随机访问 即根据索引查找元素,时间复杂度是O(1)