1.概述
在计算机科学中,数组是由一组元素(值或变量)组成的数据结构,每个元素有至少一个索引或键来标识
因为数组内的元素是连续存储的,所以数组中元素的地址,可以通过其索引计算出来,例如:
int[] array = {1,2,3,4,5}
知道了数组的数据起始地址 BaseAddressBaseAddressBaseAddress,就可以由公式 BaseAddress+i∗sizeBaseAddress + i * sizeBaseAddress+i∗size 计算出索引 iii 元素的地址
- iii 即索引,在 Java、C 等语言都是从 0 开始
- sizesizesize 是每个元素占用字节,例如 intintint 占 444,doubledoubledouble 占 888
空间占用
Java 中数组结构为
- 8 字节 markword(记录了这个对象的 HashCode,分代年龄,锁信息等等)
- 4 字节 class 指针(压缩 class 指针的情况)
- 4 字节 数组大小(决定了数组最大容量是 2322^{32}232)
- 数组元素 + 对齐字节(java 中所有对象大小都是 8 字节的整数倍[^12],不足的要用对齐字节补足)
随机访问性能
即根据索引查找元素,时间复杂度是 O(1)O(1)O(1)
2.动态数组
package com.lemon.demo.array;
import java.util.Arrays;
import java.util.Iterator;
import java.util.function.Consumer;
import java.util.stream.IntStream;
/**
* @author 李猛
* @datetime 2024/10/17 17:41
* @description 动态数组
*/
public class DynamicArray implements Iterable<Integer> {
private int capacity = 8;//容量,初始容量8
private int size = 0;