在ArrayList上操作时,AbstractList.remove()中的UnsupportedOperationException

bgu*_*uiz 43 java iterator list arraylist

ArrayList的列表迭代器确实实现了remove方法,但是,我得到以下抛出的异常:

UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:144)
Run Code Online (Sandbox Code Playgroud)

通过此代码:

protected void removeZeroLengthStringsFrom(List<String> stringList)
{
    ListIterator<String> iter = stringList.listIterator();
    String s;
    while (iter.hasNext())
    {
        s = iter.next();
        if (s.length() == 0)
        {
            iter.remove();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我已经证实List<String>我传入的确是ArrayList<String>.

谢谢!

Mik*_*e M 128

我想您可能正在使用该Arrays实用程序来获取List您传递给该方法的内容.对象确实是类型ArrayList,但java.util.Arrays.ArrayList不是java.util.ArrayList.

java.util.Arrays.ArrayList版本是不可改变的,其remove()方法不覆盖.因此,它推迟AbstractList执行remove(),抛出一个UnsupportedOperationException.

  • 解决方案是这样的:new ArrayList <>(Arrays.asList("a","b","c")) (28认同)
  • Collections.addAll(targetCollection,{...})也可以. (2认同)