当前位置: 首页 > news >正文

Java List 集合详解:从基础到实战,掌握 Java 列表操作全貌

作为一名 Java 开发工程师,你一定在项目中频繁使用过 List 集合。它是 Java 集合框架中最常用、最灵活的数据结构之一。无论是从数据库查询出的数据,还是前端传递的参数列表,List 都是处理这些数据的首选结构。

本文将带你全面掌握:

  • List 接口的核心方法与特性
  • 常见实现类(如 ArrayListLinkedListVectorCopyOnWriteArrayList
  • List 的遍历、增删改查、排序、线程安全等操作
  • List 在实际业务中的应用场景
  • List 与数组、集合工具类(如 Arrays.asList()Collections)的结合使用
  • 最佳实践与常见误区

并通过丰富的代码示例和真实项目场景讲解,帮助你写出更高效、结构更清晰的 Java 列表代码。


🧱 一、什么是 List 集合?

List 是 Java 集合框架中 Collection 接口的子接口,表示一个有序、可重复、可通过索引访问的元素集合。

✅ List 的核心特性:

特性描述
有序元素按照插入顺序存储
可重复允许添加重复元素
可索引访问支持通过 get(index) 获取元素
可动态扩容如 ArrayList 会自动扩容
支持泛型推荐使用泛型来保证类型安全

🔍 二、List 的常见实现类

实现类特点适用场景
ArrayList基于数组实现,查询快,增删慢默认列表实现,适合频繁读取
LinkedList基于链表实现,增删快,查询慢插入删除频繁、队列操作
Vector线程安全,性能较低旧版本遗留类,建议使用 Collections.synchronizedList()
CopyOnWriteArrayList线程安全,写时复制,读操作不加锁多读少写的并发场景

🧠 三、List 的基本操作

✅ 1. 创建与初始化

// 使用 ArrayList 初始化
List<String> list = new ArrayList<>();// 静态初始化
List<String> list2 = Arrays.asList("Java", "Python", "C++");// 不可变列表(Java 9+)
List<String> list3 = List.of("A", "B", "C");

✅ 2. 添加元素

list.add("Java");            // 添加到末尾
list.add(0, "Go");           // 插入到指定索引
list.addAll(Arrays.asList("Python", "JavaScript")); // 添加集合

✅ 3. 删除元素

list.remove("Java");         // 按值删除
list.remove(0);              // 按索引删除
list.clear();                // 清空列表

✅ 4. 修改元素

list.set(0, "Kotlin");       // 替换指定索引的元素

✅ 5. 查询元素

String first = list.get(0);  // 获取指定索引元素
boolean contains = list.contains("Java"); // 是否包含某个元素
int index = list.indexOf("Java");         // 查找元素索引

✅ 6. 遍历方式对比

遍历方式示例特点
普通 for 循环for (int i = 0; i < list.size(); i++)支持索引操作
增强 for 循环for (String s : list)简洁易读
Iterator 迭代器Iterator<String> it = list.iterator(); while (it.hasNext())支持在遍历中删除
Stream 流式处理list.stream().forEach(System.out::println)支持过滤、映射、排序等操作

🔁 四、List 的高级操作

✅ 1. 排序

// 默认排序(升序)
list.sort(null);// 自定义排序(降序)
list.sort(Collections.reverseOrder());// 使用 Lambda 表达式排序
list.sort((a, b) -> b.compareTo(a));

✅ 2. 反转与洗牌

Collections.reverse(list); // 反转列表
Collections.shuffle(list); // 打乱顺序(随机排列)

✅ 3. 子列表与替换

List<String> subList = list.subList(0, 3); // 获取子列表 [0, 3)
Collections.replaceAll(list, "Java", "JVM"); // 替换所有匹配元素

✅ 4. 转换为数组

String[] array = list.toArray(new String[0]);

✅ 5. 合并与去重

List<String> combined = new ArrayList<>();
combined.addAll(list1);
combined.addAll(list2);Set<String> unique = new LinkedHashSet<>(combined);
List<String> deduplicated = new ArrayList<>(unique);

🧪 五、List 的实际应用场景

场景1:从数据库查询结果封装为 List

List<User> users = new ArrayList<>();
try (ResultSet rs = statement.executeQuery("SELECT * FROM users")) {while (rs.next()) {User user = new User(rs.getString("name"), rs.getInt("age"));users.add(user);}
}

场景2:前端参数接收(Spring Boot)

@PostMapping("/save")
public void saveUsers(@RequestBody List<User> users) {userService.saveAll(users);
}

场景3:使用 List 实现简单的缓存

List<CacheItem> cache = new ArrayList<>();public void put(String key, String value) {cache.add(new CacheItem(key, value));
}public String get(String key) {return cache.stream().filter(item -> item.getKey().equals(key)).map(CacheItem::getValue).findFirst().orElse(null);
}

场景4:多线程安全的 List

List<String> list = Collections.synchronizedList(new ArrayList<>());
// 或者
List<String> list = new CopyOnWriteArrayList<>();

🚫 六、常见误区与注意事项

误区正确做法
在遍历中直接删除元素使用 Iterator.remove()
使用 == 比较字符串元素使用 equals() 或 Objects.equals()
忘记初始化 List 就使用先 new ArrayList<>()
忘记处理 null 元素List 允许添加 null,但某些操作会抛出异常
忽略线程安全问题多线程建议使用 CopyOnWriteArrayList 或同步包装
错误使用 List.of() 修改列表List.of(...) 是不可变列表,修改会抛出异常

📊 七、List 核心知识点一览表

内容说明
接口定义List<E>
常用实现类ArrayListLinkedListCopyOnWriteArrayList
核心方法add、remove、set、get、size、contains、indexOf
遍历方式普通 for、增强 for、Iterator、Stream
常用操作排序、反转、子列表、合并、去重
线程安全Collections.synchronizedList()CopyOnWriteArrayList
应用场景数据库结果集、前端参数接收、缓存、任务队列

📎 八、附录:List 常用技巧速查表

技巧示例
创建只读列表Collections.unmodifiableList(list)
同步列表Collections.synchronizedList(new ArrayList<>())
列表转数组list.toArray(new String[0])
判断是否为空list.isEmpty()
获取最大最小值Collections.max(list) / Collections.min(list)
列表反转Collections.reverse(list)
列表洗牌Collections.shuffle(list)
替换所有元素Collections.replaceAll(list, "old", "new")
使用 Stream 过滤list.stream().filter(s -> s.startsWith("A")).toList()
使用 Stream 转换list.stream().map(String::toUpperCase).toList()

如果你正在准备一篇面向初学者的技术博客,或者希望系统回顾 Java 基础知识,这篇文章将为你提供完整的知识体系和实用的编程技巧。

欢迎点赞、收藏、转发,也欢迎留言交流你在实际项目中遇到的 List 集合相关问题。我们下期再见 👋

📌 关注我,获取更多Java核心技术深度解析!

http://www.lryc.cn/news/591450.html

相关文章:

  • Kubernetes 学习笔记
  • 【JEECG 组件扩展】JSwitch开关组件扩展单个多选框样式
  • 基于pytorch深度学习笔记:1.LeNetAlexNet
  • XXE漏洞4-XXE无回显文件读取-PentesterLab靶场搭建
  • Kotlin密封类
  • 6. 工程化实践类:《Webpack 5 性能优化全指南:从构建速度到输出质量》
  • 如何成为高级前端开发者:系统化成长路径。
  • 自动化测试工具 Selenium 入门指南
  • CTF Crypto基础知识
  • python(one day)——春水碧于天,画船听雨眠。
  • Matplotlib 轴标题与刻度字号调整方法
  • SGMD辛几何模态分解 直接替换Excel运行包含频谱图相关系数图 Matlab语言!
  • 多重共线性Multicollinearity
  • pytorch小记(三十一):深入解析 PyTorch 权重初始化:`xavier_normal_` 与 `constant_`
  • cuda编程笔记(8)--线程束warp
  • imx6ull-系统移植篇9——bootz启动 Linux 内核
  • Java全栈工程师面试实录:从电商支付到AI大模型架构的深度技术挑战
  • 软件项目管理学习笔记
  • S7-1200 模拟量模块全解析:从接线到量程计算
  • FreeRTOS学习笔记——常用函数说明
  • MQTT之CONNECT报文和CONNACK报文
  • Qwen3-8B Dify RAG环境搭建
  • @fullcalendar/vue 日历组件
  • SpringCloud面试笔记
  • 【每日刷题】跳跃游戏
  • Apache DolphinScheduler介绍与部署
  • 分布式光伏发电系统中的“四可”指的是什么?
  • 解读PLM系统软件在制造企业研发管理中的应用
  • 18650锂电池点焊机:新能源制造的精密纽带
  • AR智能巡检:制造业零缺陷安装的“数字监工”