Collections.unmodifiableSet()

Collections.unmodifiableSet() 是 Java 标准库中 java.util.Collections 类提供的一个静态方法,用于返回指定集合的不可修改视图。‌12 该方法允许模块为用户提供对内部集合的只读访问权限,任何尝试修改返回集合的操作都会抛出 UnsupportedOperationException。‌14

方法签名与参数

  • ‌签名‌:public static <T> Set<T> unmodifiableSet(Set<? extends T> s)12
  • ‌参数‌:s 是待生成不可修改视图的源集合(Set 类型)。
  • ‌返回值‌:返回指定集合的不可修改视图,即一个只读的 Set。‌12

功能与行为

  • ‌只读访问‌:对返回集合的查询操作(如 contains、迭代)会直接作用于原集合,但修改操作(如 addremove)均会抛出 UnsupportedOperationException。‌14
  • ‌视图机制‌:返回的集合是原集合的“视图”,意味着对原集合的修改可能影响视图(反之亦然),但通过该方法生成的视图本身禁止修改。‌46
  • ‌序列化支持‌:如果原集合是可序列化的,返回的不可修改集合也将保持可序列化。‌1
 

使用示例

import java.util.*;

public class Example {
    public static void main(String[] args) {
        Set<String> modifiableSet = new HashSet<>();
        modifiableSet.add("Apple");
        modifiableSet.add("Banana");

        // 创建不可修改视图
        Set<String> unmodifiableSet = Collections.unmodifiableSet(modifiableSet);

        // 查询操作正常
        System.out.println(unmodifiableSet.contains("Apple")); // true

        // 尝试修改会抛出异常
        try {
            unmodifiableSet.add("Cherry");
        } catch (UnsupportedOperationException e) {
            System.out.println("Modification not allowed: " + e.getMessage());
        }
    }
}

‌输出‌:

true
Modification not allowed: java.lang.UnsupportedOperationException

 

 

注意事项

  • ‌原集合可变性‌:原集合仍可被修改,若原集合被修改,不可修改视图的内容可能随之变化。‌46
  • ‌适用场景‌:适用于需要向外部提供只读访问的场景,如库或框架中保护内部数据。‌37
  • ‌替代方案‌:若需更强的不可变性保证,可考虑使用第三方库(如 Guava 的 ImmutableSet),其天生不可变且线程安全。‌7
posted on 2025-12-20 18:45  云淡风轻博客  阅读(2)  评论(0)    收藏  举报