目录
一、List 基础概念
1.1 什么是 List?
1.2 List 的核心特性1.3 List 家族成员
二、List 基本操作
2.1 创建 List 的三种方式2.2 添加元素 - 丰富你的书架2.3 访问元素 - 查找书籍2.4 修改元素 - 替换书籍2.5 删除元素 - 清理书架
三、遍历 List 的多种方式
3.1 基础遍历方法3.2 使用迭代器3.3 Java 8+ 高级遍历3.4 遍历性能对比
四、List 高级操作
4.1 排序操作4.2 过滤与转换4.3 数学统计4.4 列表转换
五、ArrayList 深度解析
5.1 内部结构5.2 扩容机制5.3 性能特点
六、LinkedList 深度解析
6.1 内部结构6.2 操作原理6.3 性能对比 ArrayList
七、实战应用案例
7.1 学生成绩管理系统7.2 购物车实现
八、最佳实践与性能优化
8.1 选择正确的 List 实现8.2 性能优化技巧
九、常见问题与解决方案 (30分钟)
ConcurrentModificationException性能陷阱:LinkedList的随机访问对象相等性判断
十、总结与进阶学习
List 知识体系总结
一、List 基础概念
1.1 什么是 List?
List 就像是一个智能书架:可以按顺序存放书籍(元素)
每本书都有固定位置(索引)
可以随时添加、取出或重新排列书籍// 创建一个书架(List)
List
二、List 基本操作
2.1 创建 List 的三种方式// 方式1:标准创建(推荐)
List
Listfruits.add("苹果"); // 末尾添加fruits.add(0, "香蕉"); // 指定位置插入fruits.addAll(Arrays.asList("橙子", "葡萄")); // 批量添加System.out.println(fruits);// 输出: [香蕉, 苹果, 橙子, 葡萄]2.3 访问元素 - 查找书籍// 获取单个元素String firstFruit = fruits.get(0); // "香蕉"// 检查元素是否存在boolean hasApple = fruits.contains("苹果"); // true// 查找元素位置int appleIndex = fruits.indexOf("苹果"); // 12.4 修改元素 - 替换书籍// 替换指定位置的元素String oldFruit = fruits.set(1, "青苹果");System.out.println("被替换的水果: " + oldFruit); // "苹果"2.5 删除元素 - 清理书架// 按索引删除String removed = fruits.remove(0); // 删除"香蕉"// 按元素值删除boolean isRemoved = fruits.remove("葡萄"); // true// 批量删除fruits.removeAll(Arrays.asList("橙子", "青苹果"));// 清空书架fruits.clear();
三、遍历 List 的多种方式
3.1 基础遍历方法// 1. for循环(索引访问)
for (int i = 0; i < fruits.size(); i++) {System.out.println((i+1) + ". " + fruits.get(i));}// 2. 增强for循环for (String fruit : fruits) {System.out.println(fruit);}3.2 使用迭代器// 3. Iterator遍历Iterator3.3 Java 8+ 高级遍历// 4. forEach方法fruits.forEach(fruit -> System.out.println(fruit));// 5. 方法引用fruits.forEach(System.out::println);// 6. 并行流遍历(大数据量)
fruits.parallelStream().forEach(fruit -> {// 并行处理逻辑});3.4 遍历性能对比遍历方式10万元素耗时适用场景for循环5ms需要索引时增强for 7ms简单遍历Iterator 8ms需要删除元素时forEach 10ms函数式编程并行流3ms大数据量处理
四、List 高级操作
4.1 排序操作List
Collections.sort(numbers);// 输出: [1, 2, 3, 5, 9]// 自定义排序(降序)
numbers.sort((a, b) -> b - a);// 输出: [9, 5, 3, 2, 1]// 对象排序List// 过滤高价水果List4.3 数学统计IntSummaryStatistics stats = numbers.stream().mapToInt(Integer::intValue).summaryStatistics();System.out.println("最大值: " + stats.getMax());System.out.println("最小值: " + stats.getMin());System.out.println("平均值: " + stats.getAverage());System.out.println("总数: " + stats.getSum());4.4 列表转换// List转数组String[] fruitArray = fruits.toArray(new String[0]);// 数组转List(不可修改)
List
List
五、ArrayList 深度解析
5.1 内部结构ArrayList 就像是一个智能伸缩书架:// 简化版ArrayList实现public class SimpleArrayList5.2 扩容机制
5.3 性能特点操作时间复杂度说明get(index) O(1)直接通过索引访问add(element) O(1)平均时间复杂度add(index, element) O(n)需要移动后续元素remove(index) O(n)需要移动后续元素contains(element) O(n)需要遍历查找
六、LinkedList 深度解析
6.1 内部结构LinkedList 就像是一个带前后指针的书本链:// 简化版链表节点class Node6.2 操作原理// 在指定位置插入元素public void add(int index, E element) {// 1. 找到目标位置的节点Node6.3 性能对比 ArrayList操作ArrayList LinkedList适用场景随机访问⚡️ 快 (O(1))🐢 慢 (O(n))需要频繁按索引访问头部插入🐢 慢 (O(n))⚡️ 快 (O(1))需要频繁在开头添加尾部插入⚡️ 快 (O(1))⚡️ 快 (O(1))在末尾添加中间插入🐢 慢 (O(n))⚡️ 快 (O(1))需要频繁在中间插入内存占用较少(仅需存储元素)
较多(每个元素需要额外指针)
内存敏感场景
七、实战应用案例
7.1 学生成绩管理系统class Student {private String name;private int score;// 构造方法、getter/setter省略}public class GradeSystem {private List7.2 购物车实现class CartItem {private String productId;private String name;private double price;private int quantity;// 构造方法、getter/setter省略}public class ShoppingCart {private List
八、最佳实践与性能优化
8.1 选择正确的 List 实现场景推荐实现理由读多写少ArrayList随机访问快频繁增删LinkedList插入删除快多线程环境CopyOnWriteArrayList线程安全固定大小列表Arrays.asList()内存优化不可变列表List.of()安全简洁8.2 性能优化技巧预分配容量(减少扩容开销)
// 预计存储1000个元素List批量操作(减少方法调用)
// 差: 多次调用add for (String item : items) {list.add(item);}// 好: 批量添加list.addAll(items);避免在循环中调用size// 差: 每次循环都调用size() for (int i = 0; i < list.size(); i++) {// ...
}// 好: 缓存size值int size = list.size();for (int i = 0; i < size; i++) {// ...
}使用subList视图// 创建子列表视图(不复制数据)
List
九、常见问题与解决方案 (30分钟)
ConcurrentModificationException问题:遍历时修改集合List解决方案:// 1. 使用Iterator的remove方法Iterator性能陷阱:LinkedList的随机访问问题:LinkedList
// 随机访问性能差for (int i = 0; i < list.size(); i++) {Integer value = list.get(i); // O(n)操作}解决方案// 1. 使用迭代器Iterator
}// 3. 转换为ArrayList(只读场景)
Listclass Person {String name;@Override public boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return Objects.equals(name, person.name);}@Override public int hashCode() {return Objects.hash(name);}}
十、总结与进阶学习
List 知识体系总结
到此这篇关于Java List 使用详解:从入门到精通的文章就介绍到这了,更多相关Java List 使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:Java中List的contains()方法的使用小结使用Java获取List交集数据的实现方案小结使用Java找出两个List中的重复元素三种方法详解Java List中五种常见实现类的使用java中list使用时需避免的场景总结Java中List使用stream流转成map的几种方式详解浅析java中asList的使用详解Java List接口的集合使用详解
