qaq
不可变集合
- 创建以后不能修改长度和内容
- 将不能被修改的数据防御性地拷贝到不可变集合中
- 集合对象被不可信的库调用时,不可变形式是安全的
创建
List
、Set
、Map
接口里,都有of
方法可以创建不可变集合
细节
List
:直接用Set
:元素不能重复Map
:元素不能重复,直接传键值对数量不超过10。超过10个用ofEntries
方法
示例
List<String> list = List.of("a", "b", "c", "d");
Set<String> set = Set.of("a", "b", "c", "d");
Map<String, String> mp = Map.of("a", "A", "b", "B");
//参数为 键,值,键,值
//这样最多传20个参即10对键值
//已有的Map
HashMap<String, String> hm = new HashMap<>();
//获取键值对对象
Set<Map.Entry<String, String>> entries = hm.entrySet();
//toArray方法在底层会比较集合的长度和数组的长度两者大小关系
//若集合长度 大于 数组长度,那么重新创建数组
//如果集合长度 不超过 数组长度,直接用
//所以new一个0长度比较合适
Map.Entry[] arr = entries.toArray(new Map.Entry[0]);
//不可变的map集合
Map mmp = Map.ofEntries(arr);
另一种方法(jdk8忽略)
最方便的方式
static <K, V> Map<K,V> copyOf(Map<? extends K, ? extends V> map) {
if (map instanceof ImmutableCollections.AbstractImmutableMap) {
return (Map<K,V>)map;
} else {
return (Map<K,V>)Map.ofEntries(map.entrySet().toArray(new Entry[0]));
}
}