2012-03-06 10 views
6

Eventuali duplicati:
Is the order guaranteed for the return of keySet() of a LinkedHashMap object?Comportamento dei keySet di LinkedHashMap() e valori() Metodi

consideri creo un LinkedHashMap, come il seguente:

Map<String, String> map = new LinkedHashMap<String, String>(); 
map.put("a", "aa"); 
map.put("b", "bb"); 
map.put("c", "cc"); 

Quando Chiamo keySet(), mi dà un set ordinato? E se chiamo values(), sono ordinati anche questi?

EDIT

Sry, significava ordinato, non ordinati.

+1

Non è un contratto scritto in [Java Doc] (http://docs.oracle.com/javase/6/docs/api/java/util/HashMap.html#keySet%28%29). Tutto ciò che garantisce è un'interfaccia Set. – Nishant

+3

Perché non [utilizzare l'origine, Luca] (http://javasourcecode.org/html/open-source/jdk/jdk-6u23/java.util/LinkedHashMap.java.html)? – DNA

+0

@DNA il link che hai dato è ormai rotto :( – GreenGiant

risposta

8

Prima di tutto è LinkedHashMapordinato ma non allineati. TreeMap è ordinati (e quindi ordinate pure).

Detto questo, non è possibile prevedere l'ordine di keySet() e values() da ordinare. In realtà il JavaDoc dice nulla circa l'ordine (come si scopre, l'ordine è garantita da JavaDoc: Is the order guaranteed for the return of keys and values from a LinkedHashMap object?) di queste raccolte, tuttavia guardando l'attuazione dovrebbero seguire l'ordine del sottostante Map.

Per affrontare recente modifica alla tua domanda: non è parte del contratto, infatti LinkedHashMap non ha nemmeno implementare keySet() e values() ma utilizza classi di base della versione (HashMap). Anche se basato sull'attuazione è possibile vedere l'ordine è conservato, non si deve dipendere da esso se si desidera che l'applicazione per essere portabile.

+1

Si prega di guardare la risposta accettata di questa domanda: http://stackoverflow.com/questions/2923856/is-the-order-guaranteed-for-the-return-of-keyset-of-a-linkedhashmap-object –

+0

@ ArneEvertsson: +1, grazie, ha corretto la mia risposta. In effetti ho contrassegnato questa domanda come duplicata. –

2

non si ottiene una o raccolta differenziata SortedSet durante il recupero del set di chiavi oi valori. Tuttavia, le implementazioni restituite utilizzano gli iteratori chiave/valore della mappa e pertanto restituiscono i valori nell'ordine di inserimento, ad es. quando viene utilizzato in un ciclo di foreach.

Così si ottiene l'ordine come definito dallo LinkedHashMap ma non si può necessariamente considerarlo ordinato (e non è possibile ricorrere a tali raccolte neanche).

Problemi correlati