String[ ] 和 List<String> 的区别
今天在开发的时候,碰到一个业务场景,要给不同的标题,赋予不同的颜色(固定浅色系)。
一、基本概念
| 项目 | String[] | List<String> |
|---|---|---|
| 类型 | 数组(Array) | 集合(Collection) |
| 所在包 | Java 基础类型(无须导包) | java.util.List |
| 大小 | 固定长度 | 可动态增删 |
| 存储 | 连续内存块 | 由 List 接口 + 动态数组或链表实现 |
| 主要实现类 | 无(数组是原生类型) | ArrayList, LinkedList 等 |
| 定义方式 | String[] arr = {"A", "B"}; | List<String> list = Arrays.asList("A", "B"); 或 new ArrayList<>() |
| 可变性 | 长度固定、元素可改 | 长度可变、元素可改(可增删) |
二、示例对比
1. 定义方式
// 数组
String[] colorsArray = {"red", "blue", "green"};// List
List<String> colorsList = new ArrayList<>();
colorsList.add("red");
colorsList.add("blue");
colorsList.add("green");
2. 添加元素
// ❌ 数组长度固定,不能直接添加
colorsArray[3] = "yellow"; // 报错:数组越界// ✅ List 可以随时添加
colorsList.add("yellow");
3. 删除元素
// ❌ 数组不能删除,只能手动创建新数组
String[] newArray = Arrays.copyOf(colorsArray, colorsArray.length - 1);// ✅ List 直接删除
colorsList.remove("blue");
4. 遍历方式
两者都能用增强 for 循环:
for (String color : colorsArray) { ... }
for (String color : colorsList) { ... }
5. 转换方式
数组 → List
String[] arr = {"A", "B", "C"};
List<String> list = Arrays.asList(arr); // 注意:返回的 List 长度固定
List → 数组
List<String> list = List.of("A", "B", "C");
String[] arr = list.toArray(new String[0]);
6. 内存与性能
数组:固定大小、连续内存,性能略高;
List:更灵活,但底层可能会自动扩容(尤其是
ArrayList),开销稍高。
三、使用建议
| 场景 | 推荐使用 |
|---|---|
| 数据数量固定、不需要增删 | ✅ String[] |
| 需要频繁添加、删除、修改元素 | ✅ List<String> |
| 要与 Stream、Collections 等工具类配合 | ✅ List<String> |
| 要节省内存、追求性能极限 | ✅ String[](比如算法题) |
四、快速总结一句话
String[]是固定长度的容器,性能高但死板;
List<String>是可变长度的集合,灵活强大、现代开发首选。
