数组、ArrayList、集合的区别
数组列表(ArrayList) 和集合(Collection) ,其实是包含关系 + 功能差异,我先给你最核心结论,再详细拆解:
Collection 是 Java 所有单值集合的「总接口」(爸爸)
ArrayList 是 Collection 接口的「一个实现类」(儿子)
数组([])是 Java 基础类型,和集合体系完全独立
日常开发最常对比的是:数组 vs ArrayList,我把三者一次性讲清楚。
一、先理清层级关系(最重要)
Collection(顶层接口:List、Set、Queue 都继承它)
↳ List(接口)
↳ ArrayList(数组列表,最常用)
↳ LinkedList
↳ Set(接口)
↳ HashSet、TreeSet 等
- Collection :不是具体类,是规则/标准,规定集合必须有
add()、remove()、size()等方法。 - ArrayList :遵守 Collection 规则的具体工具类,底层用数组实现。
- 数组 :
int[]、String[],Java 原生语法,不属于集合框架。
二、核心区别对比表(直接背这个)
| 特性 | 数组 (int[]/String[]) | ArrayList | Collection |
|---|---|---|---|
| 类型 | 基础语言特性 | 集合实现类 | 顶层接口 |
| 长度 | 固定不可变 | 动态扩容 | 无实现,依赖子类 |
| 存储类型 | 基本类型 + 引用类型 | 只能存对象 | 只能存对象 |
| 增删元素 | 麻烦,需手动移动 | 简单,add/remove |
定义了增删方法 |
| 遍历 | for 循环 | for/迭代器/Lambda | 迭代器遍历 |
| 使用场景 | 长度固定、高性能 | 长度不确定、最常用 | 多态、通用代码 |
三、详细关键区别讲解
1. 长度(最大区别)
-
数组 :创建时必须指定长度,永远不能变
javaint[] arr = new int[5]; // 长度固定 5 -
ArrayList :会自动扩容 ,用起来不用管长度
javaArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); // 长度自动增加 -
Collection:只是接口,没有长度概念。
2. 存储数据类型
- 数组 :可以存 基本类型 (
int、double)+ 对象 - ArrayList / 集合 :只能存对象 ,基本类型要包装成
Integer、Double
3. 功能丰富度
-
数组 :功能极少,只有
length属性和[]取值 -
ArrayList :自带大量方法
javalist.add(); // 添加 list.remove(); // 删除 list.get(); // 获取 list.contains(); // 判断是否包含 -
Collection:规定了上面这些方法名,但不实现逻辑。
4. 性能
- 数组:最快,最轻量
- ArrayList:比数组稍慢(因为有自动扩容),但开发效率极高
四、一句话总结
- Collection = 集合的总规则(不能直接用)
- ArrayList = 遵守规则的动态数组工具(最常用)
- 数组 = Java 原生固定长度容器
总结
- Collection 是接口,定义规则;ArrayList 是类,实现功能
- 数组长度固定,ArrayList 长度可变
- 日常开发:优先用 ArrayList,只有追求极致性能时才用数组
- 集合体系里还有
Set、Map,和 ArrayList 用途不同