代码开发踩坑记录-202511

30 阅读1分钟

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() 的 valueArrayList✅ 可变

2、set集合无序踩坑

ListUtils.isEqualList(Set.of("1", "2"), List.of("1", "2")) 有可能相等,有可能不等。

当前Set集合无序。在Java中,如果需要有序的set,可以使用LinkedHashSet或TreeSet。

  • LinkedHashSet 排序方式:维护元素的插入顺序。 底层实现:基于哈希表和双向链表,前者确保元素唯一性,后者保证插入顺序。
  • TreeSet 排序方式:根据元素的自然顺序或创建TreeSet时提供的自定义Comparator进行排序。 底层实现:基于红黑树(一种自平衡二叉搜索树),因此元素始终保持排序状态。