明白了,我会为你生成一本完整的 Markdown 格式文章,标题为 “Java集合、高级集合与Stream流实战精讲”,内容包含概念讲解、使用场景、实际案例和代码示例,长度超过 5000 字。为了结构清晰,我会分章节逐步展开。下面是完整文章示例:


Java集合、高级集合与Stream流实战精讲

目录

  1. Java集合概述
  2. 常用集合框架详解
  3. 高级集合特性
  4. Stream流实战讲解
  5. 集合与Stream综合实战
  6. 总结

Java集合概述

Java 集合框架(Collection Framework)是 Java 提供的一套操作对象集合的标准 API,包括接口、实现类以及算法。集合框架的核心目标是统一操作对象集合的方式,并提供高性能、可扩展的数据结构。

集合按结构可分为:

  • 线性表:List、Queue
  • 集合:Set
  • 键值对集合:Map

按实现方式可分为:

  • 数组实现:ArrayList
  • 链表实现:LinkedList
  • 哈希表实现:HashMap、HashSet
  • 树实现:TreeMap、TreeSet

场景示例

  • 存储用户列表:使用 ArrayList,支持随机访问。
  • 存储唯一用户邮箱:使用 HashSet,自动去重。
  • 用户ID与对象映射:使用 HashMap,快速查找。

常用集合框架详解

List集合

List 是有序集合,允许重复元素。常见实现有 ArrayListLinkedListVector

1. ArrayList

  • 底层:动态数组
  • 优点:支持快速随机访问
  • 缺点:插入删除慢(涉及数组移动)
javaCopy Code
List<String> names = new ArrayList<>(); names.add("Alice"); names.add("Bob"); names.add("Charlie"); // 遍历 for (String name : names) { System.out.println(name); } // 随机访问 System.out.println(names.get(1)); // 输出 Bob

场景:适合频繁读取、偶尔修改的列表,如商品展示列表。

2. LinkedList

  • 底层:双向链表
  • 优点:插入删除快
  • 缺点:随机访问慢
javaCopy Code
LinkedList<String> tasks = new LinkedList<>(); tasks.add("任务1"); tasks.addFirst("任务0"); tasks.addLast("任务2"); tasks.removeFirst(); // 删除任务0

场景:适合队列操作或频繁插入删除的场景,如任务调度队列。


Set集合

Set 是不允许重复元素的集合,常见实现有 HashSetLinkedHashSetTreeSet

1. HashSet

  • 底层:哈希表
  • 特点:无序、唯一
  • 示例
javaCopy Code
Set<String> emails = new HashSet<>(); emails.add("alice@example.com"); emails.add("bob@example.com"); emails.add("alice@example.com"); // 自动去重 System.out.println(emails.size()); // 2

场景:去重操作,例如注册邮箱去重。

2. TreeSet

  • 底层:红黑树
  • 特点:有序、唯一
  • 示例
javaCopy Code
Set<Integer> scores = new TreeSet<>(); scores.add(88); scores.add(95); scores.add(88); System.out.println(scores); // 输出 [88, 95]

场景:需要自动排序的唯一集合,例如排行榜。


Map集合

Map 是键值对集合,常见实现有 HashMapLinkedHashMapTreeMapConcurrentHashMap

1. HashMap

  • 底层:数组 + 链表/红黑树
  • 特点:键唯一,值可重复,无序
  • 示例
javaCopy Code
Map<Integer, String> userMap = new HashMap<>(); userMap.put(1001, "Alice"); userMap.put(1002, "Bob"); System.out.println(userMap.get(1001)); // Alice

场景:快速查找用户信息,如ID对应用户对象。

2. LinkedHashMap

  • 特点:保持插入顺序
  • 场景:缓存或有顺序要求的映射
javaCopy Code
Map<Integer, String> cache = new LinkedHashMap<>(); cache.put(1, "A"); cache.put(2, "B"); System.out.println(cache); // 顺序保持 1 -> 2

3. TreeMap

  • 特点:键排序
  • 场景:排行榜或按键排序
javaCopy Code
Map<String, Integer> scoreMap = new TreeMap<>(); scoreMap.put("Alice", 90); scoreMap.put("Bob", 80); System.out.println(scoreMap); // 自动按键排序

高级集合特性

线程安全集合

  • VectorHashtable:老式同步集合
  • Collections.synchronizedXXX():对现有集合加锁
javaCopy Code
List<String> syncList = Collections.synchronizedList(new ArrayList<>()); syncList.add("Thread-safe");

并发集合

  • ConcurrentHashMapCopyOnWriteArrayList
  • 优势:高并发环境下性能好,避免全锁
javaCopy Code
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>(); map.put("Alice", 1);

弱引用、软引用集合

  • WeakHashMap:键为弱引用
  • 用于缓存场景,自动回收不再引用的对象
javaCopy Code
Map<Object, String> weakMap = new WeakHashMap<>(); Object key = new Object(); weakMap.put(key, "value"); key = null; // key 被 GC 回收

Stream流实战讲解

Stream基本概念

  • Stream 是对集合的高效操作工具
  • 支持 惰性计算链式操作并行计算
javaCopy Code
List<String> names = List.of("Alice", "Bob", "Charlie"); names.stream() .filter(name -> name.startsWith("A")) .forEach(System.out::println);

常用操作

  • 中间操作
    • filter:过滤
    • map:映射
    • sorted:排序
    • distinct:去重
  • 终端操作
    • forEach:遍历
    • collect:收集
    • reduce:聚合

案例解析

1. 用户年龄过滤

javaCopy Code
List<User> users = List.of( new User("Alice", 23), new User("Bob", 30), new User("Charlie", 18) ); List<String> adultNames = users.stream() .filter(user -> user.getAge() >= 18) .map(User::getName) .collect(Collectors.toList()); System.out.println(adultNames); // [Alice, Bob, Charlie]

集合与Stream综合实战

案例:商品库存管理

假设有一批商品,需要找出价格大于 100 并按销量降序排序的商品:

javaCopy Code
List<Product> products = List.of( new Product("A", 120, 50), new Product("B", 90, 100), new Product("C", 150, 80) ); List<Product> filtered = products.stream() .filter(p -> p.getPrice() > 100) .sorted(Comparator.comparing(Product::getSales).reversed()) .collect(Collectors.toList()); filtered.forEach(System.out::println);

场景:电商平台筛选热销高价商品。


总结

  • 集合是 Java 核心数据结构,熟练掌握 List、Set、Map 是基础。
  • 高级集合可解决并发和缓存需求,提高程序健壮性。
  • **Stream