程序员社区

(Java集合面试题)怎么确保一个集合不能被修改?

很多朋友很可能想到用final关键字进行修饰,final修饰的这个成员变量,如果是基本数据类型,表示这个变量的值是不可改变的,如果是引用类型,则表示这个引用的地址值是不能改变的,但是这个引用所指向的对象里面的内容还是可以改变滴~验证一下,如下:

public class Test {
    //final 修饰
    private static final Map<Integer, String> map = new HashMap<Integer, String>();
    {
        map.put(1, "jay");
        map.put(2, "tianluo");
    }

    public static void main(String[] args) {
        map.put(1, "boy");
        System.out.println(map.get(1));
    }
}

运行结果如下:

//可以洗发现,final修饰,集合还是会被修改呢
boy

嘻嘻,那么,到底怎么确保一个集合不能被修改呢,看以下这三哥们~

  • unmodifiableMap
  • unmodifiableList
  • unmodifiableSet

再看一下demo吧

public class Test {

    private static  Map<Integer, String> map = new HashMap<Integer, String>();
    {
        map.put(1, "jay");
        map.put(2, "tianluo");

    }

    public static void main(String[] args) {
        map = Collections.unmodifiableMap(map);
        map.put(1, "boy");
        System.out.println(map.get(1));
    }
}

运行结果:

 // 可以发现,unmodifiableMap确保集合不能修改啦,抛异常了
 Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.Collections$UnmodifiableMap.put(Collections.java:1457)
    at Test.main(Test.java:14)

Java面试题

赞(1) 打赏
未经允许不得转载:IDEA激活码 » (Java集合面试题)怎么确保一个集合不能被修改?

一个分享Java & Python知识的社区