UnsupportedOperationException dans AbstractList.remove() lors de l'utilisation de ArrayList
ArrayList
liste de l'itérateur n'mettre en œuvre la méthode remove, cependant, j'ai le exception levée:
UnsupportedOperationException at java.util.AbstractList.remove(AbstractList.java:144)
Par ce code:
protected void removeZeroLengthStringsFrom(List<String> stringList)
{
ListIterator<String> iter = stringList.listIterator();
String s;
while (iter.hasNext())
{
s = iter.next();
if (s.length() == 0)
{
iter.remove();
}
}
}
Ce qui me manque ici? J'ai vérifié que le List<String>
je suis de passage dans le pays sont en effet ArrayList<String>
.
Merci!
- est plus qu'à un fil fonctionnant sur la même
List<String>
? - Je vous suggère de vérifier que l'exécution de type de
stringList
est vraiment de type java.util.Liste de tableaux. Je soupçonne que vous pourriez avoir soit unVector
ouStack
ou unArrayList
de certains forfaits différents qui ne remplace pasremove(int)
. - Comment avez-vous le vérifier? Avez-vous examiner directement
stringList.getClass()
dansremoveZeroLengthStringsFrom()
, etc.?
InformationsquelleAutor bguiz | 2011-06-07
Vous devez vous connecter pour publier un commentaire.
Je pense que vous pouvez être en utilisant la
Arrays
utilitaire pour obtenir leList
que vous passer dans cette méthode. L'objet est en effet de typeArrayList
, mais c'estjava.util.Arrays.ArrayList
, pasjava.util.ArrayList
.La
java.util.Arrays.ArrayList
version est immuable et sonremove()
méthode n'est pas surchargé. En tant que telle, elle renvoie à laAbstractList
mise en œuvre deremove()
, qui jette unUnsupportedOperationException
.remove...
pour retourner une Liste et de construire une nouvelle mutable Liste de la méthode, de la retourner à l'appelant. Cette solution ne sera pas toujours plausible (par exemple, si vous êtes accroché dans un cadre qui vous ne pouvez pas modifier), mais O(n) (itération) est légèrement meilleure que O(2n) (copie puis itérer).Je doute que vous sont transmis une liste de tableaux, comme la suppression de la méthode sur la liste de tableaux itérateur ne jette pas cette exception.
Je devine votre sont transmises à un utilisateur de la classe dérivée de ArrayList qui iterator de ne jeter qu'exception sur supprimer.