数组、列表、集合区别
在 Java 中,数组(Array)、列表(List) 和 集合(Collection) 都是用来存储一组元素的数据结构,但它们在功能、灵活性、性能等方面有明显区别。下面是它们的区别与共同点:
---
✅ 共同点(三者的共性)
特性 描述
存储多个元素 都可以用来存储一组相同类型(或兼容类型)的元素。
可迭代 都支持 `for-each` 循环(`for (T item : container)`)。
有长度/大小 都可以通过 `.length`(数组)或 `.size()`(List/Collection)获取元素数量。
支持泛型 数组不支持泛型,但 List 和 Collection 支持泛型(如 `List<String>`)。
---
🔍 区别对比表
特性 数组(Array) 列表(List) 集合(Collection)
所属包 `java.lang` `java.util` `java.util`
是否可变长 ❌ 固定长度 ✅ 可变长度 ✅ 可变长度
是否支持泛型 ❌ 不支持 ✅ 支持 ✅ 支持
是否可排序 ✅ 手动排序(`Arrays.sort`) ✅ `Collections.sort()` 或 `List.sort()` ✅ 取决于具体实现
是否可重复元素 ✅ 可以 ✅ 可以 ❌/✅ 取决于子接口(如 `Set` 不允许重复)
是否线程安全 ❌ 不是 ❌ 不是(除非使用同步包装类) ❌ 不是(除非使用同步包装类)
性能 更快(底层是连续内存) 稍慢(有封装开销) 取决于实现类
是否支持索引访问 ✅ 支持(`arr[i]`) ✅ 支持(`list.get(i)`) ❌ 不一定(如 `Set` 不支持)
实现类 原生类型 `ArrayList`, `LinkedList` `Set`, `List`, `Queue` 等
---
🧠 总结一句话记忆
- 数组:最快、最简单,但固定大小、功能少。
- List:有序、可重复、可变长,是数组的“升级版”。
- Collection:是 Java 集合框架的根接口,`List` 和 `Set` 都是它的子接口。
---
✅ 示例代码对比
```java
// 数组
int[] arr = new int[3];
arr[0] = 1;
// List
List<Integer> list = new ArrayList<>();
list.add(1);
// Collection
Collection<String> coll = new HashSet<>();
coll.add("hello");
```
---
如果你有具体的使用场景(比如:去重、排序、线程安全、性能优先等),我可以帮你推荐用哪个更合适。
