0%

8.8.4 设置不可变集合

8.8.4 设置不可变集合

Collections提供了如下三类方法来返回一个不可变的集合。

方法 描述
emptyXxx() 返回一个空的、不可变的集合对象,此处的集合Xxx既可以是List,也可以是SortedSet,Set,List,可以是MapSortedMap等.
singletonXxx() 返回一个只包含指定对象(只有一个或一项元素)的、不可变的集合对象,此处的集合Xxx既可以是List,还可以是Map.
unmodifiableXxx(Xxx xxx) 返回指定集合对象的不可变视图,此处的集合Xxx既可以是List,也可以是SetSortedSet,还可以是MapSorteMap等。

上面三类方法的参数是原有的集合对象,返回值是该集合的”只读”版本。通过Collections提供的三类方法,可以生成”只读”的CollectionMap

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import java.util.*;

public class UnmodifiableTest
{
public static void main(String[] args)
{
// 创建一个空的、不可改变的List对象
List unmodifiableList = Collections.emptyList();
// 创建一个只有一个元素,且不可改变的Set对象
Set unmodifiableSet = Collections.singleton("疯狂Java讲义");
// 创建一个普通Map对象
Map scores = new HashMap();
scores.put("语文" , 80);
scores.put("Java" , 82);
// 返回普通Map对象对应的不可变版本
Map unmodifiableMap = Collections.unmodifiableMap(scores);
// 下面任意一行代码都将引发UnsupportedOperationException异常
//①
unmodifiableList.add("测试元素");
//②
unmodifiableSet.add("测试元素");
//③
unmodifiableMap.put("语文" , 90);
}
}

上面程序的三行粗体字代码分别定义了一个空的、不可变的List对象,一个只包含一个元素的、不可变的Set对象和一个不可变的Map对象。不可变的集合对象只能访问集合元素,不可修改集合元素。所以上面程序中①②③处的代码都将引发UnsupportedOperationException异常。

原文链接: 8.8.4 设置不可变集合