2010-08-26 9 views
8

La funzione entrySet() richiamata da un'istanza di treemap restituisce un TreeSet di una voce o semplicemente un insieme di entry's.È l'ordine assicurato?Il valore entrySet() di una TreeMap restituisce un TreeSet

Invece di ottenerlo come un insieme di voci come si può ottenere un elenco di voci in ordine?

+0

In realtà si intende un 'TreeSet', o solo un' Set' con un determinato comportamento? – skaffman

+0

Voglio solo dire se sarebbe in ordine o meno. – Emil

+0

@Emil sembra che il set di voci restituito dal set venga fornito con un ordinamento naturale .... – Victor

risposta

7

È il contrario: un TreeSet utilizza una TreeMap internamente. (Vedi prima frase del TreeSet docs)

Non c'è molto sole il codice sorgente Java che posso trovare sul web per collegare, ma qui ci sono alcune versioni oldish:

Come si può vedere, TreeMap definisce una classe interna chiamata TreeMap.EntrySet che estende semplicemente AbstractSet. E no, non implementa SortedSet (che altrimenti sarebbe probabilmente specificato dal contratto SortedMap.entrySet()).

Ma per rispondere alla domanda effettiva: sì, l'ordine è garantito come specificato nel contratto SortedMap.entrySet().


Aggiornamento: link JavaDoc aggiornati per Java 8, le fonti sono ancora Java 6

5

Dal JavaDoc:

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

Restituisce una vista Set delle mappature contenute in questa mappa. L'iteratore del set restituisce le voci in ordine crescente di chiave.

+0

Che non lo rende un set di alberi, ma piuttosto (e non posso considerarlo scontato) un SortedSet. – Riduidel

+3

Esatto, è sicuramente un set ordinato, ma non necessariamente un 'java.util.SortedSet' o anche un TreeSet. –

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

ma il set è in realtà ordine.

Problemi correlati