如何在Java中创建不可变集合?


无论何时你需要创建一个初始化后无法更改的对象,你都可以定义一个不可变对象。创建不可变对象没有具体的规则,其理念是在初始化后限制对类字段的访问。

集合在集合框架中是一个接口,它不允许重复值。

创建不可变集合时,你需要记住以下几点:

  • 我们不应该能够向其中添加或删除元素。
  • 我们不应该能够向不可变集合中添加空值。
  • 一旦你创建了一个不可变集合,你不能向其中添加或删除对象,但是你可以修改其中存储的对象。

使用Java 9的of()方法

Java 9 的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>();
      //Populating the HashSet
      hashSet.add(1124);
      hashSet.add(3654);
      hashSet.add(7854);
      hashSet.add(9945);
      System.out.println(hashSet);
      //Converting set object to immutable
      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)

更新于:2019年8月6日

1K+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.