使用iterator.remove()时UnsupportedOperationException

时间:2015-01-23 14:42:19

标签: java iterator

我正在尝试从List中删除一些元素,但即使是最简单的示例,如this answerthis中的元素也无效。

public static void main(String[] args)
{
    List<String> list = Arrays.asList("1", "2", "3", "4");
    for (Iterator<String> iter = list.listIterator(); iter.hasNext();)
    {
        String a = iter.next();
        if (true)
        {
            iter.remove();
        }
    }
}

Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(Unknown Source)
    at java.util.AbstractList$Itr.remove(Unknown Source)

使用普通Iterator代替ListIterator无济于事。 我错过了什么?我正在使用java 7。

3 个答案:

答案 0 :(得分:29)

这只是Arrays.asList()的一个功能,之前有人问过this question

您可以将其包装在新列表中

List list = new ArrayList(Arrays.asList("1",...));

答案 1 :(得分:25)

Arrays.asList()返回一个由原始数组支持的列表。您对列表所做的更改也会反映在您传入的数组中。由于您无法向阵列添加或删除元素,因此也无法对列表进行此操作,这就是您remove调用的原因失败。 如果您希望能够动态添加和删除元素,则需要ListArrayListLinkedList等)的不同实现。

答案 2 :(得分:-3)

使用要删除的元素创建一个新列表,然后调用removeAll methode。

List<Object> toRemove = new ArrayList<Object>();
for(Object a: list){
    if(true){
        toRemove.add(a);
    }
}
list.removeAll(toRemove);