1、Java 16+ Stream API 的 .toList() 返回不可变列表
Java 16+ Stream API 的 .toList() 返回不可变列表:
- ❌ 不支持:add(), remove(), sort(), clear() 等修改操作
- ✅ 如需可变列表,使用:
- new ArrayList<>(list) - 包装为 ArrayList
- .collect(Collectors.toList()) - Stream 收集为可变列表
| 情况 | 返回类型 | 是否可变 |
|---|---|---|
| Stream.toList() (Java 16+) | 不可变列表 | ❌ 不可变 |
| Collectors.toList() | ArrayList | ✅ 可变 |
| Collectors.groupingBy() 的 value | ArrayList | ✅ 可变 |
2、set集合无序踩坑
ListUtils.isEqualList(Set.of("1", "2"), List.of("1", "2")) 有可能相等,有可能不等。
当前Set集合无序。在Java中,如果需要有序的set,可以使用LinkedHashSet或TreeSet。
- LinkedHashSet 排序方式:维护元素的插入顺序。 底层实现:基于哈希表和双向链表,前者确保元素唯一性,后者保证插入顺序。
- TreeSet 排序方式:根据元素的自然顺序或创建TreeSet时提供的自定义Comparator进行排序。 底层实现:基于红黑树(一种自平衡二叉搜索树),因此元素始终保持排序状态。