什么是不可变集合
不可变集合,英文叫 immutable,顾名思义就是说集合是不可被修改的。集合的数据项是在创建的时候提供,并且在整个生命周期中都不可改变。
为什么要用不可变集合?
第一:防御性编程需要
我有一个集合,你拿来使用,鬼知道你会不会乱搞,往集合里添加不合适的元素,或者随便删除元素,我不放心,对,就是不信你,我的集合我做主,给你个不可变的吧,这样你就不可能乱搞我的集合了,我就放心了,不担心你的操作给我带来风险 。官方解释:防御,defensive programming,听起来高级不?
第二:线程安全
没有买卖就没有杀害!
集合是不可变的,不让你有变化,不可能有变化。没有变化,就没有竞态条件,多少个线程来都是一个样,安全,就是***安全。
第三:节省开销
不需要支持可变性,可以尽量节省空间和时间的开销, 所有的不可变集合实现都比可变集合更加有效的利用内存。
JDK9 之前的实现
Collections
提供了一组方法把可变集合封装成不可变集合:
但这玩意儿有问题,举个例子:
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
List<String> unmodifiableList = Collections.unmodifiableList(list);
li