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操作
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); } }
运行输出:
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)等 |
| 遍历元素顺序 | 不确定 | 确定 |
| 支持随机访问元素? | 否 | 是 |
更多推荐


所有评论(0)