Pertama, berikan sepotong kode:
kelas publik asListMethod {public static void main (string [] args) {string kalimat = "I love you"; Daftar <String> Words = arrays.aslist (kalimat.split ("")); untuk (int i = 0; i <words.size ();) {if (words.get (i) .equals ("love")) {words.remove (i); melanjutkan; } i ++; } System.out.println (Words); }Kemudian, jalankan kode ini, dan akhirnya, kesalahan dilaporkan:
Pengecualian di Thread "Main" java.lang.unsupportedOperationException di java.util.abstractlist.remove (abstractlist.java:161) di list.aslistmethod.main (aslistmethod.java:12)
Bagian bawah daftar rantai kesalahan.
Words.remove (i);
Kesalahan ini membuat saya bingung karena saya secara kasar melihat kode ini sebelum menulis kode ini. Metode arrays.aslist mengembalikan daftar array. Mengapa saya tidak bisa menghapusnya? Selanjutnya, karena kesalahan kecil, hasil array. Daftar ditugaskan ke java.util.arraylist, tetapi penugasan gagal. Saya langsung merasa seperti kucing buta menabrak tikus mati. Kemudian, ikuti metode array. Arrays.aslist mengembalikan java.util.arrays.arraylist, yang hanya merupakan kelas array dalam. Kodenya tidak lama, jadi saya mempostingnya langsung di sini:
Private Static Class ArrayList <E> memperluas AbstractList <E> mengimplementasikan acak ACCORECESS, java.io.serializable {private static final long serialversionuid = -2764017481108945198l; final private e [] a; Arraylist (e [] array) {a = objeks.requirenonnull (array); } @Override public int size () {return A.length; } @Override Public Object [] toArray () {return A.Clone (); } @Override @SuppressWarnings ("Uncecked") 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; mengembalikan a; } @Override public e get (int index) {return a [index]; } @Override public e set (indeks int, elemen e) {e oldvalue = a [index]; a [index] = elemen; Kembalikan OldValue; } @Override public int indexof (objek 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 berisi (objek o) {return indexof (o)! = -1; } @Override Public Spliterator <E> spliterator () {return spliterator.spliterator (a, spliterator.ordered); }} Dari kode sumber, ia mewarisi dari AbstractList dan tidak ada metode hapus, saya menemukan metode hapus Daftar Abstrak:
PUBLIK E REMPANTIVE (INT INDEX) {lempar baru unsportedOperationException (); } Di sinilah pesan kesalahan berasal. Akhirnya, kita tahu bahwa arraylist yang dikembalikan oleh array. Daftar tidak mendukung hapus. Faktanya, java.util.arrays.arraylist tidak mendukung segala bentuk penghapusan elemen.
Singkatnya, solusi untuk masalah ini memang agak seperti kucing buta memukul mouse mati, tetapi selama saya melihat dengan cermat kesalahan yang dilaporkan:
di java.util.abstractlist.remove (abstractlist.java:161)
Menyebut metode hapus java.util.Abstractlist berbeda dari apa yang saya harapkan, dan itu dapat memberi tahu saya arahnya dengan jelas.
Saya harap artikel ini akan membantu semua orang untuk mempelajari pemrograman Java.