目录
1. 基本性质
-
Array:
-
是 Java 语言内置的基本数据结构
-
固定长度,一旦创建大小不能改变
-
可以存储基本数据类型和对象
-
-
ArrayList:
-
是 Java 集合框架的一部分(java.util 包)
-
动态大小,可以自动扩容
-
只能存储对象(自动装箱基本数据类型)
-
2. 声明和初始化
// Array 声明
int[] intArray = new int[10]; // 固定长度
String[] strArray = {"a", "b", "c"};
// ArrayList 声明
ArrayList<Integer> intList = new ArrayList<>(); // 初始容量10,可增长
ArrayList<String> strList = new ArrayList<>(Arrays.asList("a", "b", "c"));
3. 主要区别对比
| 特性 | Array | ArrayList |
|---|---|---|
| 大小 | 固定长度 | 动态增长 |
| 性能 | 访问快(O(1)),增删慢(O(n)) | 访问快(O(1)),增删可能慢(扩容时) |
| 存储类型 | 基本类型和对象 | 只能存储对象 |
| 内存管理 | 连续内存分配 | 动态内存分配 |
| 内置方法 | 很少,只有length属性 | 丰富(add, remove, contains等) |
| 多维支持 | 支持多维数组 | 只能模拟多维(ArrayList嵌套) |
| 类型安全 | 运行时检查 | 编译时泛型检查 |
| 序列化 | 需要手动实现 | 已实现Serializable接口 |
4. 何时使用哪种?
使用 Array 的情况:
-
知道确切的数据量且不会改变
-
需要最高性能的存储和访问
-
需要存储基本数据类型
-
需要多维数组结构
使用 ArrayList 的情况:
-
数据量不确定或会变化
-
需要频繁添加/删除元素
-
需要使用集合的高级方法
-
需要自动扩容功能
5. 性能考虑
-
访问元素:两者都是 O(1) 时间复杂度
-
添加元素:
-
Array:需要手动扩容和复制数据
-
ArrayList:自动扩容,但扩容时需要复制数组
-
-
内存使用:
-
Array:更紧凑,没有额外开销
-
ArrayList:有额外容量和对象包装开销
-
6. 转换示例
// Array 转 ArrayList
String[] array = {"a", "b", "c"};
ArrayList<String> list = new ArrayList<>(Arrays.asList(array));
// ArrayList 转 Array
ArrayList<String> list = new ArrayList<>();
list.add("a"); list.add("b"); list.add("c");
String[] array = list.toArray(new String[0]);

790

被折叠的 条评论
为什么被折叠?



