225. Java 集合 - List接口 —— 记住顺序的集合

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?"】】、】

相关推荐
噢,我明白了6 小时前
java中唯一键和幂等键的应用
java·后端
福兮说7 小时前
前端下载大文件,点了按钮半天没反应:fetch + blob 的三个问题和三种替代写法
前端·javascript·性能优化·文件下载
GreenTea7 小时前
我把 Agent 的 while 循环拆掉了:一种你可能没想到的 Agent 架构
前端·后端·架构
考虑考虑7 小时前
synchronized字符串常量
java·后端·java ee
科技观察哨7 小时前
六足平台选型与纳米定位系统集成:HEB-640六自由度位移台在半导体光刻对准中的参数边界与国产替代评估
前端·人工智能
niucloud-admin7 小时前
JAVA V6 多商户商城 开发文档——web前端
前端
颜进强8 小时前
16 · NestJS LifecycleEvents 生命周期事件:五个钩子、三条边界,和 rag-server 的优雅停机
前端·后端·ai编程
GetcharZp8 小时前
定位不再一个个吐坐标:英伟达 LocateAnything 上手全攻略
后端
今年下半年9 小时前
【VUE】整合腾讯地图、自定义区域边界、村委名称及资产统计(放大显示资产点位)
前端·javascript·vue.js
郑州光合科技余经理9 小时前
同城电商系统:库存变更怎么同步到订单
java·开发语言·前端·后端·uni-app·php·ai编程