Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

使用 Collections 工具类有哪些注意点?

查看完整题解

参考回答

直接回答

先确认方法是修改原集合、返回视图,还是创建新结果,再检查输入条件。排序和反转会改列表;unmodifiableList 返回不可修改视图,不隔离原列表变化;synchronizedList 保护单次调用,遍历还需遵守同步规则。只读、快照与线程安全是不同要求。

讲清原理

Collections 的名字不能说明返回值是否独立。把原列表包成不可修改视图,相当于收走这条访问路径的写按钮,底层仍是原来的数据。调用方若持有原列表,仍可改变视图看到的内容。

排序、shuffle、reverse 要求输入支持相应修改;二分查找要求事先有序且比较规则一致。包装器可以叠加,但叠加前要说明想保护哪种约束,并避免把底层可变对象继续泄露出去。

不可修改视图仍连接原列表,独立副本隔离列表结构但不深拷贝元素
不可修改视图仍连接原列表,独立副本隔离列表结构但不深拷贝元素

例子与易错点

Java 21 的 main 片段:

var source = new java.util.ArrayList<>(java.util.List.of("A"));
var view = java.util.Collections.unmodifiableList(source);
var copy = java.util.List.copyOf(source);
source.add("B");
System.out.println(view);
System.out.println(copy);

输出 [A, B]、[A]。copy 隔离列表结构变化,但元素对象仍可能共享。synchronizedList 的迭代要在返回的包装器上加锁,并保证所有访问都经同一同步策略。

相关题:第 8 题、第 34 题、第 39 题、第 46 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。