1.概述
本快速教程将展示如何使用核心JDK 创建一个ArrayList不可变,使用Guava,最后使用Apache Commons Collections 4。
2.使用JDK
首先,JDK提供了一种从现有集合中获取不可修改集合的好方法:
Collections.unmodifiableList(list);
此时新集合不再可修改:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() {
List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");
}
3.使用Guava
Guava提供了类似的功能来创建自己的ImmutableList版本:
ImmutableList.copyOf(list);
同样 - 结果列表不应该是可修改的:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() {
List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = ImmutableList.copyOf(list);
unmodifiableList.add("four");
}
请注意,此操作实际上将创建原始列表的副本,而不仅仅是视图。
Guava还提供了一个构建器 - 这将返回强类型的ImmutableList而不是简单的List:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() {
List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
ImmutableList<Object> unmodifiableList = ImmutableList.builder().addAll(list).build();
unmodifiableList.add("four");
}
4.使用Apache Collections Commons
最后,Commons Collection还提供了一个API来创建一个不可修改的列表:
ListUtils.unmodifiableList(list);
同样,修改结果列表应该导致UnsupportedOperationException:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingCommonsCollections_whenUnmodifiableListIsCreated_thenNotModifiable() {
List<String> list = new ArrayList<String>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = ListUtils.unmodifiableList(list);
unmodifiableList.add("four");
}
5.结论
本教程说明了如何使用核心JDK,Google Guava或Apache Commons Collections 从现有ArrayList轻松创建不可修改的List。
imageimage微信关注:Java知己, 每天更新Java知识哦,期待你的到来!
网友评论