📅  最后修改于: 2023-12-03 14:52:45.309000             🧑  作者: Mango
在Java中,我们可以使用特定的方法和工具来确保集合对象的只读性。只读集合是指一旦创建后,就不允许对其进行任何修改操作,例如添加、删除或更新元素。
下面将介绍几种实现只读集合的方法和示例代码。
Java的Collections类提供了一系列静态方法来创建只读集合。它的unmodifiableXXX系列方法可以将普通的集合转换为只读集合。
以下是一些常用的unmodifiableXXX方法和示例代码:
import java.util.*;
List<String> mutableList = new ArrayList<>();
mutableList.add("元素1");
mutableList.add("元素2");
List<String> readOnlyList = Collections.unmodifiableList(mutableList);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlyList.add("元素3"); // 编译时会报错
import java.util.*;
Set<String> mutableSet = new HashSet<>();
mutableSet.add("元素1");
mutableSet.add("元素2");
Set<String> readOnlySet = Collections.unmodifiableSet(mutableSet);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlySet.add("元素3"); // 编译时会报错
import java.util.*;
Map<String, Integer> mutableMap = new HashMap<>();
mutableMap.put("键1", 1);
mutableMap.put("键2", 2);
Map<String, Integer> readOnlyMap = Collections.unmodifiableMap(mutableMap);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlyMap.put("键3", 3); // 编译时会报错
Google Guava是一款功能强大的Java库,其中的Immutable集合提供了创建只读集合的另一种方法。
以下是使用Guava的Immutable集合创建只读集合的示例代码:
import com.google.common.collect.*;
List<String> mutableList = new ArrayList<>();
mutableList.add("元素1");
mutableList.add("元素2");
ImmutableList<String> readOnlyList = ImmutableList.copyOf(mutableList);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlyList.add("元素3"); // 编译时会报错
import com.google.common.collect.*;
Set<String> mutableSet = new HashSet<>();
mutableSet.add("元素1");
mutableSet.add("元素2");
ImmutableSet<String> readOnlySet = ImmutableSet.copyOf(mutableSet);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlySet.add("元素3"); // 编译时会报错
import com.google.common.collect.*;
Map<String, Integer> mutableMap = new HashMap<>();
mutableMap.put("键1", 1);
mutableMap.put("键2", 2);
ImmutableMap<String, Integer> readOnlyMap = ImmutableMap.copyOf(mutableMap);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlyMap.put("键3", 3); // 编译时会报错
这种方法的优点是简单且易于理解。但需要注意的是,当使用这种方法时,只读集合和原始集合是共享底层数据的,所以任何对原始集合的修改都会反映在只读集合中。
自Java 9开始,Java标准库中的集合类提供了一种更简洁的创建只读集合的方法,即使用of方法。
以下是Java 9的of方法创建只读集合的示例代码:
import java.util.*;
List<String> readOnlyList = List.of("元素1", "元素2", "元素3");
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlyList.add("元素4"); // 编译时会报错
import java.util.*;
Set<String> readOnlySet = Set.of("元素1", "元素2", "元素3");
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlySet.add("元素4"); // 编译时会报错
import java.util.*;
Map<String, Integer> readOnlyMap = Map.of("键1", 1, "键2", 2, "键3", 3);
// 任何修改操作都会抛出UnsupportedOperationException异常
readOnlyMap.put("键4", 4); // 编译时会报错
这种方法的好处是代码更简洁,不需要通过中间变量进行转换。
本文介绍了在Java中创建只读集合的三种常见方法:使用Collections类的unmodifiableXXX方法、使用Guava库的Immutable集合和使用Java 9的of方法。根据具体的需求和使用环境,选择适合的方法来确保集合的只读性。记住,只读集合可以避免意外的修改,提高代码的可靠性和安全性。