まず、コードを与えます。
public class aslistmethod {public static void main(string [] args){string cente = "i love you"; list <string> words = arrays.aslist(cente.split( "")); for(int i = 0; i <words.size();){if(words.get(i).equals( "love")){words.remove(i);続く; } i ++; } system.out.println(words); }次に、このコードを実行し、最後にエラーが報告されました。
java.util.abstractlist.remove(abstractlist.java:161)atlist.aslistmethod.main(aslistmethod.java:12)のjava.util.abstractlist.remove(abstractlist.java:161)のjava.unsupportedoperationexceptionのスレッドの例外
エラーチェーンlist.aslistmethod.main(aslistmethod.java:12)の下部は、このコード行に関するものです。
words.remove(i);
このコードを書く前にこのコードを大まかに見たので、このエラーにより混乱しました。 Arrays.AslistメソッドはArrayListを返します。なぜ削除できないのですか?次に、小さな間違いのため、アレイの結果はjava.util.arrayListに割り当てられましたが、割り当ては失敗しました。私はすぐに盲目の猫が死んだネズミに当たったように感じました。次に、Arrays.Aslistメソッドに従って、このアレイリストが同じArrayListではないことがわかります。 arrays.aslistは、java.util.arrays.arraylistを返します。これは、単なる内部クラスの配列です。そのコードは長くないので、ここに直接投稿しました:
Private Static Class ArrayList <e> extends AbstractList <e>は、ランダムアクセス、java.io.serializable {private static final long serialversionuid = -2764017481108945198l;プライベートファイナルe [] a; arrayList(e [] array){a = objects.requirenonnull(array); } @Override public int size(){return a.length; } @Override public object [] toarray(){return a.clone(); } @override @suppresswarnings( "unchecked")public <t> t [] toarray(t [] a){int size = size(); if(a.length <size)return arrays.copyof(this.a、size、(class <?extends t []>)a.getclass()); System.ArrayCopy(this.a、0、a、0、size); if(a.length> size)a [size] = null; aを返します。 } @override public e get(int index){return a [index]; } @Override public e set(int index、e element){e oldvalue = a [index]; a [index] = element; OldValueを返します。 } @Override public int indexof(object o){if(o == null){for(int i = 0; i <a.length; i ++)if(a [i] == null)return i; } else {for(int i = 0; i <a.length; i ++)if(o.equals(a [i]))return i; } return -1; } @Override public boolean contains(object o){return indexof(o)!= -1; } @Override public Spliterator <e> spliterator(){return spliterators.spliterator(a、spliterator.ordered); }}ソースコードから、抽象リストから継承し、削除方法はありません。抽象リストの削除方法が見つかりました。
public e remove(int index){新しいunsupportedoperationexception(); }これは、エラーメッセージの由来です。最後に、ArrayListがArrays.Aslistで返されたことが削除をサポートしていないことがわかります。実際、java.util.arrays.arrayListは、いかなる形式の要素除去をサポートしていません。
要約すると、この問題の解決策は、実際に死んだマウスにぶつかる盲目の猫のようなものですが、報告されたエラーを注意深く見る限り:
java.util.abstractlist.remove(abstractlist.java:161)
java.util.abstractListの削除方法を呼び出すことは、私が期待したものとは異なり、方向をはっきりと伝えることができます。
この記事がJavaプログラミングを学ぶのに役立つことを願っています。