数组长度固定、支持基本类型且无泛型,操作受限但性能高;集合长度可变、仅存对象并支持泛型,提供丰富API但有额外开销。

数组和集合的主要区别在于长度固定性、类型限制、功能丰富程度以及底层实现机制。 虽然两者都用于存储多个元素,但在实际开发中适用场景不同。
长度是否可变
数组一旦创建,长度就不可改变。你必须在初始化时指定大小,之后无法动态扩容或缩容。
集合的长度是可变的,可以根据需要添加或删除元素。例如ArrayList会自动扩容。
- int[] arr = new int[5]; // 长度固定为5
- List
list = new ArrayList(); // 可以add()多次,自动增长
存储类型与泛型支持
数组可以存储基本类型(如int、char)和引用类型。但不支持泛型擦除机制,只能通过声明类型来约束。
集合只能存储引用类型(对象),不能直接存基本类型(需用包装类如Integer)。集合支持泛型,可以在编译期检查类型安全。
- String[] strs = new String[10]; // 合法,数组声明字符串类型
- List
strings = new ArrayList(); // 使用泛型限定只能存String
提供的操作方法
数组本身没有内置的方法来添加、删除、查找元素,只能通过下标访问或配合Arrays工具类使用。
集合框架提供了丰富的API,如add、remove、contains、size等,操作更方便灵活。
立即学习“Java免费学习笔记(深入)”;
- 数组常用:arr.length、Arrays.sort(arr)、Arrays.toString()
- 集合常用:list.add(e)、set.contains(e)、map.get(key)
性能与内存开销
数组由于结构简单,内存占用小,访问速度快(通过索引直接定位)。
集合封装了更多逻辑,有额外的开销(如对象包装、动态扩容判断),但提升了开发效率。
- 频繁读取、已知数量时优先考虑数组
- 元素数量不确定、需要频繁增删时选择集合










