在 Java 中,数组(Array) 和 集合(Collection) 都是用于存储多个数据的容器结构。它们有一些相似之处,但也存在显著的区别,适用于不同的使用场景。
✅ 一、Java 数组与集合的相似点
相似点 | 说明 |
---|
存储多个元素 | 都可以用来保存一组相同或不同类型的数据(集合支持泛型) |
支持遍历 | 都可以通过循环进行遍历访问每个元素 |
可以通过索引访问(部分集合) | 如 List 接口支持通过索引访问元素 |
都属于 Java 数据结构的一部分 | 是 Java 程序中常用的数据存储方式 |
❌ 二、Java 数组与集合的不同点
区别点 | 数组 | 集合 |
---|
类型 | 原生语言结构 | 类库(java.util 包) |
大小固定性 | 固定大小(初始化后不能改变) | 动态扩容(如 ArrayList , HashMap 等) |
元素类型 | 只能是同一类型(基本类型或引用类型) | 可以是不同类型的对象(如果不用泛型) |
支持操作 | 操作较少(赋值、访问、遍历等) | 操作丰富(增删改查、排序、查找、去重等) |
元素重复 | 允许重复 | Set 不允许重复;List 允许重复 |
是否有序 | 有序(按索引顺序) | List 有序;Set 无序(除非用 LinkedHashSet ) |
线程安全 | 否 | 部分集合线程安全(如 Vector , Collections.synchronizedList() ) |
性能 | 访问快(O(1)) | 根据实现类不同性能也不同 |
泛型支持 | 不支持 | 支持泛型,提高了类型安全性 |
键值对 | 不支持 | Map 支持键值对存储 |
🧪 三、代码示例对比:数组 vs 集合(List)
示例 1:创建和添加元素
// 数组
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;// List 集合
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
示例 2:动态扩容
// 数组不能扩容,只能重新创建一个更大的数组
int[] newArr = new int[arr.length + 1];
System.arraycopy(arr, 0, newArr, 0, arr.length);
newArr[arr.length] = 4;// 集合自动扩容
list.add(4); // 自动增长容量
示例 3:删除元素
// 数组不能直接删除,需要手动复制
int indexToRemove = 1;
for (int i = indexToRemove; i < newArr.length - 1; i++) {newArr[i] = newArr[i + 1];
}// 集合可以直接删除
list.remove(1); // 删除索引为1的元素
示例 4:遍历
// 数组遍历
for (int num : arr) {System.out.print(num + " ");
}
System.out.println();// 集合遍历
for (Integer num : list) {System.out.print(num + " ");
}
System.out.println();
📊 四、适用场景总结
使用场景 | 推荐结构 |
---|
元素个数固定且频繁访问 | 数组 |
元素数量不确定、需频繁增删 | 集合(如 ArrayList ) |
去重需求 | Set |
存储键值关系 | Map |
高并发环境 | ConcurrentHashMap , CopyOnWriteArrayList 等线程安全集合 |
🧠 小贴士
- 如果你只需要快速访问和少量数据,推荐使用 数组。
- 如果你需要动态管理数据、丰富的操作方法,推荐使用 集合框架。
- 集合框架更强大、灵活,是现代 Java 开发的首选方式。