Java 不可变集合 学习笔记

qaq

不可变集合

  • 创建以后不能修改长度和内容
  • 将不能被修改的数据防御性地拷贝到不可变集合中
  • 集合对象被不可信的库调用时,不可变形式是安全的

创建

  • ListSetMap接口里,都有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]));
    }
}
img_show