array大小固定,创建后无法改变,需手动复制扩容;2. arraylist内部自动扩容(通常1.5倍),对用户透明;3. array可存基本类型和对象,arraylist只能存对象(支持自动装箱);4. array内存连续、访问快、无额外开销,适合数据量固定场景;5. arraylist提供丰富api、开发便捷,适合数据动态变化场景;6. arraylist扩容有性能和内存浪费风险,且非线程安全。

Array 和 ArrayList 的核心区别在于它们的“体质”:Array 就像一个固定大小的盒子,一旦造好,能装多少就定了,你不能临时让它变大或变小。而 ArrayList 则更像一个弹性收纳袋,它虽然内部也用盒子来装东西,但当盒子装不下时,它会偷偷换一个更大的盒子,把旧东西搬过去,整个过程对你来说是透明的,所以它看起来是“可变”的。Array 可以直接存放基本数据类型(如 int, char),也可以放对象,但 ArrayList 只能放对象(当然,通过自动装箱/拆箱,你也能像放基本类型一样使用它)。

理解 Array 和 ArrayList 的差异,关键在于它们对内存的管理方式和提供的功能。
Array,作为 Java 语言最基础的数据结构之一,它的尺寸是在创建时就确定了的。比如你声明一个
String[] names = new String[10];
names
System.arraycopy
names[0]
names[1]

而 ArrayList,它属于 Java 集合框架(Collections Framework)的一部分,是
List
add()
Object[] elementData
remove()
contains()
indexOf()
这个“固定不变”和“可变”的说法,其实是站在使用者角度的一种直观感受。Array 的“固定”是指它的内存布局和大小在创建后就不可更改。想象一下,你申请了一块地皮盖房子,这块地皮的大小是固定的,你不能说盖到一半发现不够用,就直接把地皮变大。如果你想盖更大的房子,你得重新买一块更大的地皮,然后把旧房子的东西搬过去。这就是 Array 的本质:一旦
new int[5]
int[10]

ArrayList 的“可变”则是一种巧妙的封装。它并没有真正改变它内部那个“盒子”的大小,而是当“盒子”装满时,它会悄悄地在后台创建一个新的、更大的盒子,然后把旧盒子里的所有物品(元素)小心翼翼地搬到新盒子里。这个搬家过程就是我们常说的“扩容”。举个例子,你有一个小行李箱,装满了。你不会让这个行李箱变大,而是会换一个更大的行李箱,然后把旧行李箱里的东西全部转移过去。对于你而言,你只是觉得“行李箱”能装更多东西了,但实际上,是换了一个更大的。这个内部机制,让 ArrayList 在外部表现出极大的灵活性,你无需关心容量问题,只需要
add
选择 Array 还是 ArrayList,很多时候取决于你对数据结构的需求和对性能的考量,没有绝对的优劣,只有适不适合。
如果你在编码时,已经明确知道需要处理的数据量是固定不变的,或者数据量在某个范围之内且不会频繁变动,那么 Array 可能是个不错的选择。比如,你要处理一个班级固定 30 个学生的分数,或者一个图像的 RGB 像素数据(通常是固定宽度和高度),用
int[] scores = new int[30];
byte[] pixelData = new byte[width * height * 3];
int[][] matrix
然而,在绝大多数日常业务开发中,我们处理的数据量往往是动态变化的,你可能不知道用户会上传多少张图片,或者数据库会返回多少条记录。这时候,ArrayList 的便捷性就体现出来了。它的自动扩容机制,让你无需担心容量问题,可以随心所欲地
add
remove
contains()
indexOf()
subList()
ArrayList<String>
ArrayList 的“动态扩容”机制,确实是它实现灵活性的核心。简单来说,它内部有一个
Object[] elementData
add()
size
elementData
capacity
扩容的步骤大致是这样的:
oldCapacity + (oldCapacity >> 1)
Object[]
System.arraycopy()
elementData
这个过程听起来很棒,但它确实带来了一些潜在的问题:
add
add
remove
ConcurrentModificationException
Vector
Collections.synchronizedList(new ArrayList<...>)
CopyOnWriteArrayList
以上就是Array 和 ArrayList 有何区别?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号