2013-07-30 50 views
1

我從例如代碼,但它不工作:迭代器remove方法

List<Byte> myList = Arrays.asList(B); 
Iterator<Byte> itr = myList.iterator(); 

while(itr.hasNext()) 
{ 
    Byte element = itr.next(); 
    if(element == 32) 
    { 
     itr.remove(); 
    } 
} 

我無法理解爲什麼上面的代碼生成以下異常。

Exception in thread "main" java.lang.UnsupportedOperationException 
at java.util.AbstractList.remove(AbstractList.java:144) 
at java.util.AbstractList$Itr.remove(AbstractList.java:360) 
+0

因爲這正是文檔說它會做的? –

回答

2

Arrays.asList(B);返回一個固定大小的列表:您可以設置或獲取項目,但不能刪除或添加。這在the javadoc中有解釋:

返回由指定數組支持的固定大小列表。

要創建具有靈活大小的列表,可以使用:

List<Byte> myList = new ArrayList<> (B.length); 
Collections.addAll(myList, B); 

其比更有效的(只有一個對象創建)和可讀性:

List<Byte> myList = new ArrayList<> (Arrays.asList(B)); 
+0

如何創建可以修改的列表? 我有數組Byte [] B = new Byte []; – Ryainad

+0

我需要將放在括號內嗎? List myList = new ArrayList (Arrays.asList(B)); – Ryainad

+0

是的,Java 6,沒有Java 7或更高版本。 – assylias

4
List<Byte> myList = Arrays.asList(B); 

返回一個固定的大小的列表,可以不被修改。

+0

如何創建可以修改的列表? – Ryainad

+0

我有數組Byte [] B = new Byte []; – Ryainad

+0

List myList = new ArrayList <>(Arrays.asList(B)); – prasanth

0

Arrays.asList返回Arrays.ArrayList這是靜態的內部類,不覆蓋AbstractList的刪除操作和default remove operationAbstractList拋出UnsupportedOperationException

Find the openjdk code for Arrays.ArrayList

+0

我有數組Byte [] B = new Byte [];我需要將其轉換爲列表如何創建可以修改的列表? – Ryainad

+0

List myList = new ArrayList <>(Arrays.asList(B)); – prasanth

+0

該功能已記錄,無需查看代碼... – assylias