2012-01-07 42 views
5

Quiero eliminar hasta el último elemento de este conjunto.cómo eliminar el último elemento en java.util.Set?

 Set<String> listOfSources = new TreeSet<String>(); 
     for(Route route:listOfRoutes){ 
      Set<Stop> stops = routeStopsService.getStops(route); 
      for(Stop stop:stops) 
       listOfSources.add(stop.getStopName()); 
     } 

aquí quiero eliminar el último elemento de listOfSources.

+1

OMI de su código se basa en un conjunto ordenado, entonces es no procede declarar la variable como un conjunto. Codificar en una interfaz solo tiene sentido si la implementación no tiene importancia; en este caso, sí lo hace, y su código fallará si utiliza la respuesta aceptada y usted cambia la implementación del conjunto. –

Respuesta

13

Tendrá que volver a enviar a TreeSet, ya que Set no tiene ningún pedido.

listOfSources.remove(((TreeSet) listOfSources).last()); 
+0

gracias a su funcionamiento ... –

5

Como alternativa se puede establecer listOfSources como SortedSet

SortedSet<String> listOfSources = new TreeSet<String>(); 

continuación, puede utilizar last() método sin poner a TreeSet

listOfSources.remove(listOfSources.last()); 

Creo que este es un enfoque preferido, ya supones que tu Set tiene un orden.

1

Otra posibilidad es usar la clase Stack. (Aunque es menos eficiente para el problema en cuestión)

 Set<String> listOfSources = new TreeSet<String>(); 

    Stack<String> stack = new Stack<String>(); 
    stack.addAll(listOfSources); 
    ... 
    String lastElement = stack.pop(); 

pop() método obtendrá el último elemento y sacarlo de la pila.

+0

Esto sería menos eficiente (ya que está creando una copia poco profunda de la colección, y luego ordenándola) y redundante, ya que la estructura ordenada ya está en su lugar, solo necesita acceder correctamente. –

+0

Es solo para referencia de otros usuarios que tienen problemas similares. Tal vez la Pila puede ser una opción en otros casos. En este, esto es realmente menos eficiente. –

Cuestiones relacionadas