使用 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
调用失败。
如果您希望能够动态地向其中添加和删除元素,则需要 List
(ArrayList
、LinkedList
等)的不同实现。
我正在尝试从 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
调用失败。
如果您希望能够动态地向其中添加和删除元素,则需要 List
(ArrayList
、LinkedList
等)的不同实现。