明白了,我会为你生成一本完整的 Markdown 格式文章,标题为 “Java集合、高级集合与Stream流实战精讲”,内容包含概念讲解、使用场景、实际案例和代码示例,长度超过 5000 字。为了结构清晰,我会分章节逐步展开。下面是完整文章示例:
Java集合、高级集合与Stream流实战精讲
目录
Java集合概述
Java 集合框架(Collection Framework)是 Java 提供的一套操作对象集合的标准 API,包括接口、实现类以及算法。集合框架的核心目标是统一操作对象集合的方式,并提供高性能、可扩展的数据结构。
集合按结构可分为:
- 线性表:List、Queue
- 集合:Set
- 键值对集合:Map
按实现方式可分为:
- 数组实现:ArrayList
- 链表实现:LinkedList
- 哈希表实现:HashMap、HashSet
- 树实现:TreeMap、TreeSet
场景示例:
- 存储用户列表:使用
ArrayList,支持随机访问。- 存储唯一用户邮箱:使用
HashSet,自动去重。- 用户ID与对象映射:使用
HashMap,快速查找。
常用集合框架详解
List集合
List 是有序集合,允许重复元素。常见实现有 ArrayList、LinkedList 和 Vector。
1. ArrayList
- 底层:动态数组
- 优点:支持快速随机访问
- 缺点:插入删除慢(涉及数组移动)
javaCopy CodeList<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 CodeLinkedList<String> tasks = new LinkedList<>();
tasks.add("任务1");
tasks.addFirst("任务0");
tasks.addLast("任务2");
tasks.removeFirst(); // 删除任务0
场景:适合队列操作或频繁插入删除的场景,如任务调度队列。
Set集合
Set 是不允许重复元素的集合,常见实现有 HashSet、LinkedHashSet 和 TreeSet。
1. HashSet
- 底层:哈希表
- 特点:无序、唯一
- 示例:
javaCopy CodeSet<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 CodeSet<Integer> scores = new TreeSet<>();
scores.add(88);
scores.add(95);
scores.add(88);
System.out.println(scores); // 输出 [88, 95]
场景:需要自动排序的唯一集合,例如排行榜。
Map集合
Map 是键值对集合,常见实现有 HashMap、LinkedHashMap、TreeMap、ConcurrentHashMap。
1. HashMap
- 底层:数组 + 链表/红黑树
- 特点:键唯一,值可重复,无序
- 示例:
javaCopy CodeMap<Integer, String> userMap = new HashMap<>();
userMap.put(1001, "Alice");
userMap.put(1002, "Bob");
System.out.println(userMap.get(1001)); // Alice
场景:快速查找用户信息,如ID对应用户对象。
2. LinkedHashMap
- 特点:保持插入顺序
- 场景:缓存或有顺序要求的映射
javaCopy CodeMap<Integer, String> cache = new LinkedHashMap<>();
cache.put(1, "A");
cache.put(2, "B");
System.out.println(cache); // 顺序保持 1 -> 2
3. TreeMap
- 特点:键排序
- 场景:排行榜或按键排序
javaCopy CodeMap<String, Integer> scoreMap = new TreeMap<>();
scoreMap.put("Alice", 90);
scoreMap.put("Bob", 80);
System.out.println(scoreMap); // 自动按键排序
高级集合特性
线程安全集合
Vector、Hashtable:老式同步集合Collections.synchronizedXXX():对现有集合加锁
javaCopy CodeList<String> syncList = Collections.synchronizedList(new ArrayList<>());
syncList.add("Thread-safe");
并发集合
ConcurrentHashMap、CopyOnWriteArrayList- 优势:高并发环境下性能好,避免全锁
javaCopy CodeConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("Alice", 1);
弱引用、软引用集合
WeakHashMap:键为弱引用- 用于缓存场景,自动回收不再引用的对象
javaCopy CodeMap<Object, String> weakMap = new WeakHashMap<>();
Object key = new Object();
weakMap.put(key, "value");
key = null; // key 被 GC 回收
Stream流实战讲解
Stream基本概念
- Stream 是对集合的高效操作工具
- 支持 惰性计算、链式操作、并行计算
javaCopy CodeList<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 CodeList<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 CodeList<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
本站地址: https://www.ffyonline.com/pageSingle/articleOneWeb/121081