Maison >Java >javaDidacticiel >Comment puis-je modifier en toute sécurité des collections lors d'une itération en Java ?
Modification des collections pendant l'itération : un guide complet
Pour modifier efficacement les collections pendant l'itération afin d'éviter des erreurs telles que ConcurrentModificationException, il existe plusieurs stratégies à considérer :
Collecter et supprimer
Ceci La méthode consiste à collecter les objets à supprimer lors d'une boucle for améliorée, puis à les supprimer une fois l'itération terminée. Cette technique est particulièrement utile dans les scénarios où la suppression est l'objectif principal :
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);
Utilisation de ListIterator
ListIterator prend en charge à la fois la suppression et l'ajout d'éléments au cours de l'itération. Cela en fait un choix approprié lors de la modification de listes :
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 introduit des méthodes supplémentaires pour la modification des collections :
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());
Sous-liste ou sous-ensemble
Pour les listes triées, la suppression d'éléments consécutifs peut être effectuée efficacement à l'aide de sous-listes :
List<Book> books = new ArrayList<>(); books.subList(0, 5).clear();
Considérations
Le choix de la méthode de modification dépend du scénario spécifique et du type de collection. Voici quelques considérations clés :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!