Maison > Java > javaDidacticiel > Pourquoi la suppression d'éléments d'une liste génère-t-elle une exception UnsupportedOperationException ?

Pourquoi la suppression d'éléments d'une liste génère-t-elle une exception UnsupportedOperationException ?

Susan Sarandon
Libérer: 2024-12-30 21:51:10
original
512 Les gens l'ont consulté

Why Does Removing Elements from a List Throw an UnsupportedOperationException?

UnsupportedOperationException : Suppression d'un élément d'une liste

Lorsque vous essayez de supprimer un élément d'une liste à l'aide de list.remove(index), vous pouvez rencontrer une UnsupportedOperationException. Cette erreur provient de l'utilisation d'une liste de taille fixe renvoyée par Arrays.asList().

Arrays.asList() renvoie une liste de taille fixe

Arrays .asList() crée une liste soutenue par le tableau donné. Cette liste est immuable et ne prend pas en charge les modifications structurelles telles que l'ajout ou la suppression d'éléments.

Correction :

Pour résoudre ce problème, utilisez une implémentation de liste mutable qui autorise les suppressions. Par exemple, vous pouvez utiliser une LinkedList.

List<String> list = new LinkedList<>(Arrays.asList(split));
Copier après la connexion

Diviser avec des expressions régulières

La méthode split() est utilisée avec des expressions régulières pour diviser une chaîne. Le caractère pipe (|) est un métacaractère regex qui doit être échappé lorsqu'il est utilisé comme un caractère littéral.

Correction :

Pour diviser un caractère pipe littéral, échappez-le en utilisant des doubles barres obliques inverses.

template.split("\|")
Copier après la connexion

Optimisé Algorithme

Au lieu d'invoquer à plusieurs reprises Remove(), envisagez un algorithme plus efficace :

  1. Générez un tableau aléatoire de nombres compris entre 0 et list.size() - 1.
  2. Trier les nombres par ordre croissant.
  3. Créer une autre liste et parcourir la liste tout en parcourant les nombres triés.
  4. Lorsque l'index du numéro actuel dans la liste triée correspond à l'index de l'élément dans la liste, appelez Remove() sur la liste et supprimez l'élément.

Cet algorithme s'exécute en temps O(N), où N est la taille de la liste, ce qui est nettement plus rapide que l'approche originale.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal