Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Mengubah Suai Koleksi Dengan Selamat Semasa Memulas di Java?
Mengubah suai Koleksi Semasa Lelaran: Panduan Komprehensif
Untuk mengubah suai koleksi dengan berkesan semasa lelaran untuk mengelakkan ralat seperti ConcurrentModificationException, terdapat beberapa strategi untuk dipertimbangkan :
Kumpul dan Alih keluar
Kaedah ini melibatkan pengumpulan objek untuk dialih keluar semasa gelung untuk dipertingkatkan dan kemudian mengalih keluarnya selepas lelaran selesai. Teknik ini amat berguna dalam senario di mana pemadaman adalah matlamat utama:
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); List<Book> found = new ArrayList<>(); for (Book book : books) { if (book.getIsbn().equals(isbn)) { found.add(book); } } books.removeAll(found);
Menggunakan ListIterator
ListIterator menyediakan sokongan untuk pengalihan keluar dan penambahan item semasa lelaran. Ini menjadikannya pilihan yang sesuai apabila mengubah suai senarai:
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); ListIterator<Book> iter = books.listIterator(); while (iter.hasNext()) { if (iter.next().getIsbn().equals(isbn)) { iter.remove(); } }
JDK >= 8
Java 8 memperkenalkan kaedah tambahan untuk pengubahsuaian koleksi:
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); books.removeIf(book -> book.getIsbn().equals(isbn));
List<Book> books = new ArrayList<>(); ISBN isbn = new ISBN("0-201-63361-2"); List<Book> filtered = books.stream() .filter(book -> book.getIsbn().equals(isbn)) .collect(Collectors.toList());
Sublist atau Subset
Untuk senarai diisih, mengalih keluar elemen berturut-turut boleh dilakukan dengan cekap menggunakan subsenarai:
List<Book> books = new ArrayList<>(); books.subList(0, 5).clear();
Pertimbangan
Pilihan kaedah pengubahsuaian bergantung pada senario tertentu dan jenis koleksi. Berikut ialah beberapa pertimbangan utama:
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengubah Suai Koleksi Dengan Selamat Semasa Memulas di Java?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!