System.arraycopy 是 Java 中高效复制数组的底层方法,用于动态扩容列表时需先判断容量、计算新容量(如1.5倍)、用 arraycopy 迁移有效元素、更新引用;其不涉及泛型,仅做内存搬运,安全高效。
System.arraycopy 是 Java 中高效复制数组的底层方法,用它实现动态扩容列表(如简易 ArrayList)时,核心在于“原数组内容迁移 + 新数组分配 + 引用更新”,而不是简单调用一次拷贝就完事。
每次 add 元素前,检查当前元素数量 size 是否已达底层数组长度。若相等,说明必须扩容。常见做法是扩为原容量的 1.5 倍(或固定增量),避免频繁扩容又防止过度浪费空间。
创建新数组后,用 System.arraycopy 将旧数组全部内容复制过去。它比 for 循环快,因为由 JVM 直接调用本地内存拷贝指令(如 memcpy)。
拷贝完成后,把实例变量 elementData 指向新数组。旧数组若无其他引用,会在下次 GC 时被回收,无需手动置 null(除非在极端内存敏感场景中显式释放)。
由于 Java 泛型擦除,底层数组通常声明为 Object[]。add 时需强制类型转换,但 arraycopy 本身不涉及泛型,只做内存块搬运,因此不会触发 ClassCastException。