Java中用Object[]实现简易动态列表需手动管理扩容、存取和大小跟踪,核心字段包括elements数组、size计数器和capacity容量;添加时size达数组长度则按1.5倍扩容并复制数据,存取须校验索引边界。

Java 中用 Object[] 实现简易动态列表,核心是手动管理数组扩容、元素存取和大小跟踪——它模拟了 ArrayList 的底层逻辑,但更轻量、更透明。
维护三个关键字段
一个基础的动态列表类至少需要:
-
elements:
Object[]数组,真正存储元素 - size:当前已存元素个数(不是数组长度)
-
capacity:数组当前容量(可省略,直接用
elements.length)
例如:private Object[] elements = new Object[10]; private int size = 0;
添加元素时自动扩容
当 size == elements.length 时,必须扩容。常见策略是扩大为原容量的 1.5 倍(或翻倍),避免频繁复制:
立即学习“Java免费学习笔记(深入)”;
- 创建新数组:
Object[] newElements = new Object[(int) (elements.length * 1.5)]; - 复制旧数据:
System.arraycopy(elements, 0, newElements, 0, size); - 替换引用:
elements = newElements;
注意:不能直接用 Arrays.copyOf,虽然等效,但手写 arraycopy 更贴近底层理解。
按索引存取与边界检查
所有访问操作都需校验 index 是否合法(0 ):
-
get(int index):返回
(E) elements[index](需强制类型转换,调用方负责泛型安全) -
set(int index, E element):先检查索引,再赋值:
elements[index] = element; -
add(E element):放在末尾,
elements[size++] = element; -
add(int index, E element):需将
[index, size)区间元素后移一位,再插入
删除元素要移动数据并缩容(可选)
删除中间元素后,需将后续元素前移覆盖:
-
remove(int index):用
System.arraycopy(elements, index + 1, elements, index, size - index - 1); - 最后设空位:
elements[--size] = null;(防止内存泄漏) - 缩容可选:比如
size 且 <code>capacity > 10时,缩到capacity / 2
缩容不是必须的,但能节省内存;不缩容则只增不减,适合写多读少场景。
这种实现没有泛型擦除开销,也没有同步控制,适合教学、嵌入式或性能敏感的小型容器定制。实际开发中仍推荐用 ArrayList,但亲手写一遍,才能真正看懂它的 grow() 和 rangeCheck() 在做什么。


















