1

我有一个示例代码,但它不起作用:

List<Byte> myList = Arrays.asList(B);
Iterator<Byte> itr = myList.iterator();

while(itr.hasNext())  
{  
    Byte element = itr.next();  
    if(element == 32)  
    {  
        itr.remove();  
    }  
}

我不明白为什么上面的代码会产生以下异常。

Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.remove(AbstractList.java:144)
at java.util.AbstractList$Itr.remove(AbstractList.java:360)
4

3 回答 3

4
List<Byte> myList = Arrays.asList(B);

返回一个无法修改的固定大小的列表。

于 2013-07-30T05:48:45.967 回答
2

Arrays.asList(B);返回一个固定大小的列表:您可以设置或获取项目,但不能删除或添加。这在javadoc中有解释:

返回由指定数组支持的固定大小的列表。

要创建具有灵活大小的列表,您可以使用:

List<Byte> myList = new ArrayList<> (B.length);
Collections.addAll(myList, B);

这比以下更有效(仅创建一个对象)并且更具可读性:

List<Byte> myList = new ArrayList<> (Arrays.asList(B));
于 2013-07-30T05:49:12.750 回答
0

Arrays.asList返回Arrays.ArrayList静态内部类,不会覆盖throws 的remove 操作AbstractList默认的 remove 操作AbstractListUnsupportedOperationException

找到Arrays.ArrayList.

于 2013-07-30T05:50:04.023 回答