一:在JDK9之前创建只读集合为如下操作
package chapter14;
import java.util.*;
public class ReadOnlyDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
//设为只读List集合
list = Collections.unmodifiableList(list);
System.out.println("list的只读集合:" + list);
Set<String> set = new HashSet<>();
set.add("E");
set.add("F");
set.add("G");
//设为只读Set集合
set = Collections.unmodifiableSet(set);
System.out.println("set的只读集合:" + set);
Map<String, String> map = new HashMap<>();
map.put("k1", "v1");
map.put("k2", "v2");
map.put("k3", "v3");
//设为只读Map集合
map = Collections.unmodifiableMap(map);
System.out.println("map的只读集合:" + map);
}
}
/**
运行结果:
list的只读集合:[A, B, C]
set的只读集合:[E, F, G]
map的只读集合:{k1=v1, k2=v2, k3=v3}
*/
二:从Java 9开始,添加了静态方法of
-
用于快速创建包含少量元素的不可变集合
-
提供了一种简洁且类型安全的方式来创建只读集合,无需手动调用构造器或进行额外的转换
-
List接口中的of方法
- List接口新增的of方法允许使用【可变参数】来创建一个包含指定元素的【不可变列表】
package chapter14; import java.util.*; public class ReadOnlyDemo { public static void main(String[] args) { List<String> list = List.of("Apple", "Banana", "Cherry"); // 由于是只读列表,以下操作将抛出UnsupportedOperationException // list.add("Date"); // UnsupportedOperationException // 读取列表中的元素 for (String fruit : list) { System.out.println(fruit); } } }
``
- List接口新增的of方法允许使用【可变参数】来创建一个包含指定元素的【不可变列表】
-
Set接口中的of方法
- 类似地,Set接口也新增了of方法,用于创建包含指定元素的【不可变集合】。
- 由于集合不包含重复元素,所以传入of方法的元素会【自动去重】
package chapter14; import java.util.*; public class ReadOnlyDemo { public static void main(String[] args) { Set<String> set = Set.of("Apple", "Banana"); // "Apple"只会出现一次 // 由于是只读集合,以下操作将抛出UnsupportedOperationException // set.add("Cherry"); // UnsupportedOperationException for (String fruit : set) { System.out.println(fruit); } } }
-
Map接口中的of方法
- 对于Map接口,of方法允许传入一系列键值对来创建一个【不可变映射】。
- 键和值必须是成对出现的,并且键必须是唯一的。
package chapter14; import java.util.*; public class ReadOnlyDemo { public static void main(String[] args) { Map<String, Integer> map = Map.of("Apple", 1, "Banana", 2, "Cherry", 3); // 由于是只读映射,以下操作将抛出UnsupportedOperationException // map.put("Date", 4); // UnsupportedOperationException for (Map.Entry<String, Integer> entry : map.entrySet()) { System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue()); } } } /** 运行结果: Key: Cherry, Value: 3 Key: Apple, Value: 1 Key: Banana, Value: 2 */