2010-07-26 14 views
7
final Set<Expression> exps = meng.getExps(); 
Iterator<Expression> iterator = exps.iterator(); 
final Expression displayedExp = exps.iterator().next(); 
exps.remove(displayedExp); 

Este código devolvería las siguientes excepciones de tiempo de ejecución de seguimiento:Cómo eliminar un elemento de un conjunto?

null 
java.lang.UnsupportedOperationException 
     at java.util.Collections$UnmodifiableCollection.remove(Collections.java:1021) 

La aplicación Conjunto de meng.getExps() es una LinkedHashSet.

Respuesta

7

Disculpe, no tiene suerte: El conjunto estaba envuelto con Collections.unmodifiableCollection, que hace exactamente esto: hacer que la colección no se pueda modificar. Lo único que puede hacer es copiar el contenido en otro conjunto y trabajar con esto.

+0

y hay alguna utilidad como Collection.copy para hacer eso? – simpatico

+1

P. ej. Set set = new HashSet (exps); – Landei

+0

@Landei es el comportamiento predeterminado de java o tenemos que envolverlo explícitamente con Collections.unmodifiableCollection. Si es por defecto, ¿sabes en qué versión de java se agregó este cambio? – Atri

4

Su comprador le está devolviendo explícitamente un UnmodifiableCollection, que es un tipo de envoltura alrededor de Set s que impide la modificación.

En otras palabras, la API te dice "esta es mi colección, ¡mira pero no toques!"

Si desea modificarlo, debe copiarlo en un nuevo conjunto. Hay constructores de copia para HashSet que son excelentes para este propósito.

Cuestiones relacionadas