不可变集合

特点

定义完成后不可以修改,或者添加,删除

创建不可变集合

List,Set,Map接口中,都存在of方法可以创建不可变集合

1
static<E> List<E> of(E...elements)
1
static<E> Set<E> of(E...elements)
1
static<K,V> Map<K,V> of(E...elements)

方法的特点

  • List:直接用
  • Set:元素不能重复
  • Map:元素不能重复,键值对数量最多是10个;超过10个用ofEntries方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
HashMap<String, String> hm = new HashMap<> ();
//当Map中的键值对对象超过10个时,采用以下的方法获取一个不可变的集合
//获取到所有的键值对对象(Entry对象)
Set<Map.Entry<String, String>> entries = hm.entrySet();
//把entries变成一个数组
Map.Entry[] arr1 = new Map.Entry[0];
//toArray方法会比较集合长度和数组的长度两者的大小
//如果集合的长度 > 数组的长度:数据在数组中放不下,此时会根据实际数据的个数,重新创建数组
//如果集合的长度 <= 数组的长度:数据在数组中放得下,此时不会创建新的数组,而是直接用
//所以数组的长度可以直接设置为1
Map.Entry[] arr2 = entries.toArray(arr1);
//map集合即为不可变集合
Map map = Map.ofEntries(arr2);

//以上可以只用一行来表示
Map<String, String> map = Map.ofEntries(hm.entrySet().toArray(new Map.Entry[0]));

//JDK10以后还可以用copyof方法
Map<String, String> map = Map.copyOf(hm);