不可变集合的概念
- 不可变集合就是集合定义完成后不可以修改、添加、删除
- 集合的数据由创建时提供,整个生命周期中不可改变
不可变集合的好处
不可变集合的创建方式
JDK 9 +创建不可变集合
- List、Set、Map 接口中的 .of() 静态方法方法 (不是真正的不可变)
- List、Set、Map 接口中的 .copyOf() 静态方法方法
package immutable;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Demo01 {
public static void main(String[] args) {
List<Double> lists = List.of(140.5, 120.0, 95.5, 70.5, 80.0);
lists.add(123.0);
lists.set(0,140.0);
System.out.println(lists);
Set<String> sets = Set.of("a", "b", "d", "c");
sets.add("a");
System.out.println(sets);
Map<String,Integer> maps = Map.of("a",100,"b",200,"c",300);
maps.put("d",200);
System.out.println(maps);
}
}
- .of() 生成的不可变集合,如果修改传入的参数集合,不可变集合也会跟着改变。
- .copyOf() 不会有这样的问题。
package immutable;
import java.util.*;
public class Demo01 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
System.out.println("参数集合:"+list);
List<ArrayList<String>> list1 = List.of(list);
System.out.println("of生成的不可变集合list1:"+list1);
List<String> list2 = List.copyOf(list);
System.out.println(".copyOf生成的不可变集合list2:"+list2);
list.add("ccc");
System.out.println("参数集合list:"+list);
System.out.println("不可变集合list1是否新增了ccc"+list1);
System.out.println("不可变集合list2是否新增了ccc:"+list2);
}
}
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/b51f2118e35270961bc05dda940a0ed1.png)
JDK 8 创建不可变集合
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/1b6361513ce5947838674f7fcc47ab85.png)
参考资料