如何在Java中创建不可变集合
每当需要创建在初始化后无法更改的对象时,都可以定义不可变对象。没有创建不可变对象的特定规则,其思想是在初始化后限制对类字段的访问。
Set是集合框架中的接口,不允许重复的值。
创建不可变集时,您需要牢记以下几点:
我们不应该能够从中添加或删除元素。
我们应该不能将空值添加到不可变的集合中。
一旦创建了一个不可变的集合,就不能向其添加或删除对象,但是可以修改存储在其中的对象。
使用Java9的Of()方法
Java9的of()方法接受元素列表,创建并返回给定元素的不可变集合。使用此方法,您可以使用Java创建不可变的集合。
import java.util.Set; public class ImmutableSet { public static void main(String args[]) { Set<Integer> set = Set.of(1458, 5548, 4587); System.out.println(set); } }
使用unmodifiableSet()方法
该方法接受收集对象作为参数,并返回其不可修改的即不变的形式。
通过传递所需的对象并获取其不可变形式来调用此方法。
示例
在以下Java程序中,我们创建了一个HashSet对象,并使用unmodifiableSet()方法将其转换为不可变对象,并尝试向其添加元素。
由于我们将其设置为不可变的,因此将生成运行时异常。
import java.util.Collections; import java.util.HashSet; import java.util.Set; public class ImmutableSet { public static void main(String args[]) { Set<Integer> hashSet = new HashSet<Integer>(); //填充HashSet hashSet.add(1124); hashSet.add(3654); hashSet.add(7854); hashSet.add(9945); System.out.println(hashSet); //将 set 对象转换为不可变对象 Set immutable = Collections.unmodifiableSet(hashSet); immutable.add(4466); } }
输出结果
[1124, 3654, 9945, 7854] Exception in thread "main" java.lang.UnsupportedOperationException at java.util.Collections$UnmodifiableCollection.add(Unknown Source) at MyPackage.ImmutableSet.main(ImmutableSet.java:19)