Java中的集合
Java LinkedList指南
Java ArrayList指南
Java中不可變的ArrayList
CopyOnWriteArrayList指南
JavaJava中的多維ArrayList
將迭代器轉換為列表
Java –從列表中獲取隨機項目/元素
用Java對列表進行分區
從Java列表中刪除所有Null
從Java中的列表中刪除所有重複項
檢查Java中兩個列表是否相等
如何使用Java在列表中查找元素
Java列表UnsupportedOperationException
將列表複製到Java中的另一個列表
從列表中刪除所有出現的特定值
將多個元素添加到Java ArrayList
從列表中刪除第一個元素
在Java中迭代列表的方法
Java中兩個列表的交集
如何計算Arraylist中的重複元素
查找Java中兩個列表之間的差異
Java中不可變的ArrayList
1.概述
該教程將快速展示與核心JDK,Guava以及Apache Commons Collections 4保持如何使ArrayList不變。
2.使用JDK
首先,JDK提供了一種很好的方法來從現有集合中獲取不可修改的集合:
Collections.unmodifiableList(list);
此時,新集合不應再被修改:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingTheJdk_whenUnmodifiableListIsCreated_thenNotModifiable() {
List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = Collections.unmodifiableList(list);
unmodifiableList.add("four");
}
2.1。使用Java 9
從Java 9開始,我們可以使用List
@Test(expected = UnsupportedOperationException.class)
public final void givenUsingTheJava9_whenUnmodifiableListIsCreated_thenNotModifiable() {
final List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
final List<String> unmodifiableList = List.of(list.toArray(new String[]{}));
unmodifiableList.add("four");
}
注意我們如何將現有列表轉換為數組。這是因為List.of(elements)接受vararg參數。
3.使用Guava
Guava提供了類似的功能來創建自己的ImmutableList版本:
ImmutableList.copyOf(list);
同樣,結果列表不可修改:
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuava_whenUnmodifiableListIsCreated_thenNotModifiable() {
List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = ImmutableList.copyOf(list);
unmodifiableList.add("four");
}
請注意,此操作實際上將創建原始列表的副本,而不僅僅是視圖。
Guava還提供了一個生成器builder-這將返回強類型的ImmutableList而不是簡單的List :
@Test(expected = UnsupportedOperationException.class)
public void givenUsingGuavaBuilder_whenUnmodifiableListIsCreated_thenNoLongerModifiable() {
List<String> list = new ArrayList<>(Arrays.asList("one", "two", "three"));
ImmutableList<String> unmodifiableList = ImmutableList.<String>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<>(Arrays.asList("one", "two", "three"));
List<String> unmodifiableList = ListUtils.unmodifiableList(list);
unmodifiableList.add("four");
}
5.結論
本教程說明瞭如何使用核心JDK,Google Guava或Apache Commons Collections從現有ArrayList輕鬆創建不可修改的列表。
所有這些示例和代碼段的實現都可以在Github上找到-這是一個基於Maven的項目,因此應該很容易直接導入和運行。