使用 iterator.remove() 时出现 UnsupportedOperationException

UnsupportedOperationException when using iterator.remove()

我正在尝试从 List 中删除一些元素,但即使是最简单的示例,如 this answer or this 中的示例,也无法正常工作。

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.

这只是 Arrays.asList() 的一个特性,在查看 this question

之前已经被问到

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

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

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

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

Arrays.asList() returns 一个列表,由原始数组支持。您对列表所做的更改也会反映在您传入的数组中。因为您不能向数组添加或删除元素,所以对以这种方式创建的列表也不可能这样做,这就是为什么您的 remove 调用失败。 如果您希望能够动态地向其中添加和删除元素,则需要 ListArrayListLinkedList 等)的不同实现。