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列表UnsupportedOperationException
1.概述
在本快速教程中,我們將討論使用大多數List
實現的某些API時可能發生的常見Exception
- UnsupportedOperationException
。
java.util.List
具有比rray
所支持的普通功能更多的功能。例如,僅使用一個內置方法調用,就可以檢查結構中是否有特定元素。這通常就是為什麼我們有時需要將array
轉換為List
或Collection
。
有關核心Java List
實現ArrayList
的介紹,請參考本文。
2. UnsupportedOperationException
發生此錯誤的常見方式是當我們使用java.util.Arrays:
asList()
方法時java.util.Arrays:
public static List asList(T... a)
它返回:
- 給定
array
大小的固定大小List
- 與原始
array
元素類型相同的元素,並且它必須是一個Object
- 元素以相同順序 如原始陣列
- 可
serializable
並實現[RandomAccess](https://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html)
的列表
由於T是一個varargs
,我們可以直接將數組或項目作為參數傳遞,該方法將創建一個固定大小的初始化列表:
List<String> flowers = Arrays.asList("Ageratum", "Allium", "Poppy", "Catmint");
我們還可以傳遞一個實際的array
:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
由於返回的List
是固定大小的List
,因此我們無法添加/刪除元素。
嘗試添加更多元素將導致UnsupportedOperationException
:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = Arrays.asList(flowers);
flowerList.add("Celosia");
此Exception
的根源是,由於返回的對象與java.util.ArrayList.
不同,因此不執行add()
操作java.util.ArrayList.
這是一個java.util.Arrays.
的ArrayList
java.util.Arrays.
獲取相同異常的另一種方法是嘗試從獲取的列表中刪除一個元素。
另一方面,有一些方法可以在需要時獲取可變List
。
其中之一是直接從asList()
的結果創建ArrayList
或任何種類的列表:
String[] flowers = { "Ageratum", "Allium", "Poppy", "Catmint" };
List<String> flowerList = new ArrayList<>(Arrays.asList(flowers));
3.結論
總之,重要的是要理解,將更多的元素添加到列表中不僅對不可變的列表可能會帶來問題。
與往常一樣,示例的完整源代碼可在GitHub上獲得。