不支持的操作使用 iterator.remove() 时的异常

2022-09-01 21:36:44

我试图从中删除一些元素,但即使是最简单的例子,如这个答案这个,也不起作用。List

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)

使用普通值而不是 a 没有帮助。我错过了什么?我使用的是java 7。IteratorListIterator


答案 1

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


答案 2

这只是Arrays.asList()的一个功能,之前已经问过这个问题

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

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