迭代器删除方法

时间:2013-07-30 05:46:32

标签: java arraylist iterator byte removeclass

我有一个示例代码,但它不起作用:

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)

3 个答案:

答案 0 :(得分:4)

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

返回无法修改的固定大小列表。

答案 1 :(得分: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));

答案 2 :(得分:0)

Arrays.asList返回Arrays.ArrayList这是静态内部类,并且不会覆盖AbstractList的删除操作和AbstractList UnsupportedOperationException次{{1}}的删除操作}。

default remove operation