225. Java 集合 - List接口 ------ 记住顺序的集合
1. 🔹 List和普通Collection有什么区别?
在Java集合框架中,**List是 Collection**的一个子接口。 最大的不同在于: ✅ List会记住元素添加的顺序!
📌 具体区别总结
- 在 普通
Collection(例如Set)中,元素的顺序是不确定的。 - 在
List中,元素的顺序是确定的 ------ 元素怎么添加进去,遍历时就怎么出来。
2. 🚀 遍历时顺序固定
当你使用 for-each 或 iterator() 遍历一个List时:
- 第一个访问的元素,就是第一个添加的元素。
- 第二个访问的元素,就是第二个添加的元素。
- 以此类推,顺序永远一致。
📢 注意:
- 有些
Set实现(比如LinkedHashSet)也会"保持添加顺序",但这只是意外效果。 - 不要依赖Set的顺序行为 ,因为它不是
Set接口的规范!
3. 🎯 List元素有索引
另一个重要的区别是:
- 普通的Collection不能直接访问"第一个元素"或者"第二个元素"。
- 而在List中,每个元素有一个明确的索引(
index),从0开始编号。
因此,在List中你可以:
- 按索引获取元素 :
list.get(index) - 按索引插入元素 :
list.add(index, element) - 按索引替换元素 :
list.set(index, newElement) - 按索引删除元素 :
list.remove(index) - 获取子列表 :
list.subList(fromIndex, toIndex)
4. 🛠️ 示例:基本List操作
java
import java.util.*;
public class ListExample {
public static void main(String[] args) {
List<String> cities = new ArrayList<>();
// 添加元素
cities.add("Beijing");
cities.add("Shanghai");
cities.add("Guangzhou");
// 顺序遍历
for (String city : cities) {
System.out.println(city);
}
// 访问特定位置元素
System.out.println("First city: " + cities.get(0)); // 输出:Beijing
// 插入元素
cities.add(1, "Shenzhen");
System.out.println("After inserting Shenzhen: " + cities);
// 替换元素
cities.set(2, "Hangzhou");
System.out.println("After replacing second city: " + cities);
// 删除元素
cities.remove(3);
System.out.println("After removing city at index 3: " + cities);
// 获取子列表
List<String> subCities = cities.subList(0, 2);
System.out.println("Sublist: " + subCities);
}
}
运行输出:
java
Beijing
Shanghai
Guangzhou
First city: Beijing
After inserting Shenzhen: [Beijing, Shenzhen, Shanghai, Guangzhou]
After replacing second city: [Beijing, Shenzhen, Hangzhou, Guangzhou]
After removing city at index 3: [Beijing, Shenzhen, Hangzhou]
Sublist: [Beijing, Shenzhen]
5. 🧠 小总结
| 特性 | Collection | List |
|---|---|---|
| 是否保证元素顺序? | 不保证 | 保证插入顺序 |
| 是否有索引? | 没有 | 有,支持get/set/add(index)等 |
| 遍历元素顺序 | 不确定 | 确定 |
| 支持随机访问元素? | 否 | 是 |
📌 小贴士
-
可以举生活例子:
"想象一下,Collection像是一堆无序散落的信件,而List则像是一叠有编号的文件夹,顺序整整齐齐。"
-
提个问题引导互动:
"如果我需要按添加顺序取回元素,还能随机访问第3个元素,我应该选Collection还是List?"】】、】