2010-08-26 15 views
8

¿La función entrySet() que se llama desde una instancia treemap devuelve un TreeSet de entradas o simplemente un conjunto de entradas? ¿Está asegurada la orden?¿Un entrySet() de TreeMap devuelve un TreeSet

En lugar de obtenerlo como un conjunto de entradas, ¿cómo se puede obtener una lista de las entradas en orden?

+0

¿En realidad se refiere a 'TreeSet', o simplemente a' Set' con cierto comportamiento? – skaffman

+0

Solo quiero decir si estaría en orden o no. – Emil

+0

@Emil parece que el conjunto de entradas devuelto por el conjunto viene con un orden natural .... – Victor

Respuesta

7

Es al revés: un TreeSet utiliza un TreeMap internamente. (Véase la primera frase del TreeSet docs)

No hay mucho código fuente de Java Sun que puedo encontrar en la web para enlazar, pero aquí hay algunas versiones viejecillo:

Como puede ver, TreeMap define una clase interna llamada TreeMap.EntrySet que simplemente extiende AbstractSet. Y no, no implementa SortedSet (que de lo contrario probablemente se especificaría en el contrato SortedMap.entrySet()).

Pero para responder la pregunta real: sí, la orden está asegurada como se especifica en el contrato SortedMap.entrySet().


Actualización: enlaces JavaDoc actualizados para Java 8, las fuentes siguen siendo Java 6

5

Desde el JavaDoc:

public Set<Map.Entry<K,V>> entrySet()

Devuelve una vista de conjunto de las asignaciones que figuran en este mapa. El iterador del conjunto devuelve las entradas en orden de clave ascendente.

+0

Lo que no lo convierte en un TreeSet, sino más bien (y no puedo dar por sentado eso) un SortedSet. – Riduidel

+3

Correcto, es definitivamente un conjunto ordenado, pero no necesariamente un 'java.util.SortedSet' o incluso un TreeSet. –

0
Assert.assertFalse(new TreeMap().keySet() instanceof SortedSet); 
Assert.assertFalse(new TreeMap().keySet() instanceof TreeSet); //no need to assert 

Pero el conjunto tiene el fin realidad.

Cuestiones relacionadas