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);

これは、以下よりも効率的 (1 つのオブジェクトのみの作成) であり、次のように読みやすいです。

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

Arrays.asListこれはstatic内部クラスであり、throws の remove 操作 とデフォルトArrays.ArrayListの remove 操作をオーバーライドしません。AbstractListAbstractListUnsupportedOperationException

の openjdk コードを見つけますArrays.ArrayList

于 2013-07-30T05:50:04.023 に答える