Maison >Java >javaDidacticiel >Pourquoi `List.remove()` renvoie-t-il une `UnsupportedOperationException` ?

Pourquoi `List.remove()` renvoie-t-il une `UnsupportedOperationException` ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-19 18:11:14584parcourir

Why Does `List.remove()` Throw an `UnsupportedOperationException`?

UnsupportedOperationException lors de la suppression d'un élément de la liste

Lorsque vous essayez de supprimer un élément d'une liste à l'aide de List.remove(), vous pouvez rencontrer un Exception d'opération non prise en charge. Cette erreur survient lorsque vous appelez Remove() sur une liste qui ne prend pas en charge les modifications structurelles, telles que les modifications qui modifient sa taille.

Dans le code donné, vous créez une liste en utilisant Arrays.asList(split), qui renvoie une liste de taille fixe soutenue par la division du tableau. Les listes de taille fixe ne vous permettent pas d'ajouter ou de supprimer des éléments, ce qui entraîne l'exception UnsupportedOperationException lorsque vous appelez Remove().

Pour résoudre ce problème, vous pouvez utiliser une LinkedList à la place. LinkedList prend en charge la suppression efficace des éléments et renvoie une liste qui peut être structurellement modifiée. Voici le code corrigé :

List<String> list = new LinkedList<>(Arrays.asList(split));

De plus, le code utilise template.split("|") pour diviser le modèle de chaîne. Cependant, "|" est un métacaractère regex, vous devez donc l'échapper en tant que "|" pour qu'il soit traité comme un caractère littéral pour le fractionnement.

Enfin, envisagez d'utiliser un algorithme plus efficace en générant des indices distincts aléatoires et en utilisant un itérateur de liste pour supprimer des éléments en un seul passage. Cela améliorera la complexité temporelle en O(N) au lieu du O(N^2) actuel.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn