不能直接 new Collections(),因其构造函数为 private;常用不可变集合创建方法有 Java 9 的 List.of()、Set.of()、Map.of() 和早期的 Collections.unmodifiableXXX();排序和查找要求元素实现 Comparable 或传入 Comparator,且 binarySearch() 前提是列表已排序;同步包装器仅保证单操作原子性,现代推荐使用 ConcurrentHashMap 等并发集合。

为什么不能直接 new Collections()?
Collections 是一个纯工具类,所有方法都是 static,构造函数被显式声明为 private。试图 new Collections() 会编译报错:Constructor Collections() is not visible。它不封装状态,只提供对 Collection 实例的操作入口。
常用不可变集合创建方法有哪些?
Java 9 引入了 List.of()、Set.of()、Map.of() 等静态工厂方法,它们返回的是轻量、不可修改、线程安全的集合实例。而 Collections.unmodifiableXXX()(如 Collections.unmodifiableList())是更早的兼容方案,底层包装原集合并拦截所有修改操作,调用 add()、clear() 等会抛出 UnsupportedOperationException。
注意:unmodifiableXXX() 返回的仍是原集合类型(比如 ArrayList 的包装),不是新实现;而 List.of() 返回的是私有不可变实现,内存更紧凑。
Listmutable = new ArrayList<>(Arrays.asList("a", "b")); List unmod = Collections.unmodifiableList(mutable); unmod.add("c"); // 抛出 UnsupportedOperationException
排序和查找必须满足什么前提?
Collections.sort() 和 Collections.binarySearch() 要求元素实现 Comparable 接口,或传入显式的 Comparator。否则运行时抛出 ClassCastException 或逻辑错误(比如 binarySearch() 返回负数但不是插入点)。
立即学习“Java免费学习笔记(深入)”;
-
sort()只支持List,不支持Set或Queue -
binarySearch()前提是列表已按同一规则排好序,否则结果无意义 - 对
null元素要格外小心:默认Comparable实现通常不支持null,需自定义Comparator显式处理
同步包装器现在还推荐用吗?
Collections.synchronizedList()、synchronizedMap() 等返回的是加了 synchronized 方法锁的包装类,但它们**只保证单个操作原子性**。像遍历 + 修改组合操作(例如“检查是否存在再添加”)仍需手动同步外部代码块,否则可能出错。
现代 Java 更倾向使用并发集合:ConcurrentHashMap、CopyOnWriteArrayList、BlockingQueue 实现。它们在设计上支持高并发场景,粒度更细,性能更好。
容易忽略的一点:synchronizedXXX() 包装后的集合,其迭代器仍不是线程安全的,遍历时必须手动同步整个迭代过程。










