给 Java 新手的超全 List 使用指南
前言
学 Java 的人,几乎每天都要和 `List` 打交道。
它是最常用的数据结构之一,面试会问、工作会用、代码里到处都有它的身影。
别担心,这篇博客不会堆砌概念,而是用**大白话 + 大量代码**,带你把 List 真正搞懂。
什么是 List?
`List` 是一个**有序的集合**,你可以把它想象成一个**动态数组**。
-
✅ 可以放重复的元素
-
✅ 有索引(从 0 开始)
-
✅ 长度可以动态增长
在 Java 中,最常用的实现类是 `ArrayList`。
java
// 创建一个 List
List<String> list = new ArrayList<>();
注意啦:`List` 是接口,`ArrayList` 是实现类。一般都用这种写法。
1. 添加元素
add() --- 往里加
java
List<String> fruits = new ArrayList<>();
fruits.add("苹果"); // 加到末尾
fruits.add("香蕉");
fruits.add("橙子");
System.out.println(fruits); // [苹果, 香蕉, 橙子]
add(index, element) --- 插队
java
fruits.add(1, "葡萄"); // 插入到索引 1 的位置
System.out.println(fruits); // [苹果, 葡萄, 香蕉, 橙子]
addAll() --- 批量添加
java
List<String> moreFruits = Arrays.asList("西瓜", "哈密瓜");
fruits.addAll(moreFruits);
System.out.println(fruits); // [苹果, 葡萄, 香蕉, 橙子, 西瓜, 哈密瓜]
2. 获取元素
get(index) --- 取出来
java
String first = fruits.get(0); // 第一个
String second = fruits.get(1); // 第二个
System.out.println(first); // 苹果
System.out.println(second); // 葡萄
⚠️ **注意**:索引从 0 开始,别越界了!否则会抛 `IndexOutOfBoundsException`。
3. 修改元素
set(index, element) --- 替换
java
fruits.set(0, "草莓"); // 把第一个改成草莓
System.out.println(fruits); // [草莓, 葡萄, 香蕉, 橙子, 西瓜, 哈密瓜]
4. 删除元素
remove(index) --- 按索引删
java
fruits.remove(0); // 删除第一个
System.out.println(fruits); // [葡萄, 香蕉, 橙子, 西瓜, 哈密瓜]
remove(element) --- 按内容删
java
fruits.remove("香蕉"); // 删除"香蕉"这个元素
System.out.println(fruits); // [葡萄, 橙子, 西瓜, 哈密瓜]
clear() --- 清空全部
java
fruits.clear(); // 全部删掉
System.out.println(fruits); // []
5. 查找元素
contains() --- 查是否存在
java
boolean hasOrange = fruits.contains("橙子");
System.out.println(hasOrange); // true
indexOf() --- 查位置
java
int position = fruits.indexOf("橙子");
System.out.println(position); // 1(找不到返回 -1)
isEmpty() --- 判空
java
boolean empty = fruits.isEmpty();
System.out.println(empty); // false(因为里面有东西)
6. 遍历 List
这是最常用的操作之一,必须掌握!
普通 for 循环
java
for (int i = 0; i < fruits.size(); i++) {
System.out.println(fruits.get(i));
}
增强 for 循环(推荐新手用)
java
for (String fruit : fruits) {
System.out.println(fruit);
}
Iterator(面试常问!)
java
Iterator<String> it = fruits.iterator();
while (it.hasNext()) {
String fruit = it.next();
System.out.println(fruit);
}
forEach(Java 8+)
java
fruits.forEach(fruit -> System.out.println(fruit));
方法引用(更简洁)
java
fruits.forEach(System.out::println);
7. 排序
Collections.sort() --- 简单排序
java
List<Integer> numbers = new ArrayList<>();
numbers.add(5);
numbers.add(2);
numbers.add(8);
numbers.add(1);
Collections.sort(numbers);
System.out.println(numbers); // [1, 2, 5, 8]
自定义排序(Comparator)
java
List<String> names = new ArrayList<>();
names.add("Tom");
names.add("Alice");
names.add("Bob");
names.add("Diana");
// 按长度排序
names.sort(Comparator.comparingInt(String::length));
System.out.println(names); // [Tom, Bob, Alice, Diana]
8. 转换成数组
java
toArray()
String[] array = fruits.toArray(new String[0]);
for (String fruit : array) {
System.out.println(fruit);
}
9. 数组转 List
Arrays.asList()
java
String[] colors = {"红", "蓝", "绿"};
List<String> colorList = Arrays.asList(colors);
System.out.println(colorList); // [红, 蓝, 绿]
⚠️ 注意:这个方法返回的 List **不能增删**(是固定长度的)。如果需要可变的:
java
List<String> mutableList = new ArrayList<>(Arrays.asList(colors));
10. 常用技巧合集
判断两个 List 是否相等
java
List<String> a = Arrays.asList("1", "2", "3");
List<String> b = Arrays.asList("1", "2", "3");
System.out.println(a.equals(b)); // true
复制 List
java
List<String> original = new ArrayList<>(Arrays.asList("a", "b", "c"));
List<String> copy = new ArrayList<>(original);
替换所有元素(Java 8+)
java
List<String> words = new ArrayList<>(Arrays.asList("hello", "world"));
words.replaceAll(s -> s.toUpperCase());
System.out.println(words); // [HELLO, WORLD]
过滤元素(Java 8+ Stream)
java
List<Integer> nums = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5, 6));
List<Integer> even = nums.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
System.out.println(even); // [2, 4, 6]
总结
| 操作 | 常用方法 |
|------|----------|
| 添加 | `add()`, `addAll()` |
| 获取 | `get()` |
| 修改 | `set()` |
| 删除 | `remove()`, `clear()` |
| 查找 | `contains()`, `indexOf()` |
| 遍历 | `for`, `forEach`, `Iterator` |
| 排序 | `Collections.sort()`, `list.sort()` |
`List` 是 Java 开发中最基础也最重要的集合类,**一定要熟练掌握**。
建议:把上面的代码自己跑一遍,感受一下各个方法的效果。动手比看十遍都管用!
如果觉得有帮助,欢迎收藏、转发。有问题评论区见~