1. 🔹 List和普通Collection有什么区别?

在Java集合框架中,**ListCollection**的一个子接口。 最大的不同在于: ✅ 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. 🧠 小总结

特性CollectionList
是否保证元素顺序?不保证保证插入顺序
是否有索引?没有有,支持get/set/add(index)等
遍历元素顺序不确定确定
支持随机访问元素?
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐