2013-07-30 139 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