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
Susan Sarandonoriginal
2024-12-30 21:51:10496parcourir

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));

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("\|")

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!

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