2010-08-13 10 views
33

Quando viene chiamato LinkedHashMap.keySet(), l'ordine del Set restituito sarà uguale all'ordine in cui sono state aggiunte le chiavi?Java LinkedHashMap mantiene l'ordine delle chiavi?

+0

Per quelli che provengono da PHP, permettimi di aiutarli sottolineando che un LinkedHashMap si comporta in modo molto simile a un array PHP. –

risposta

44

Sì.

Vedi: LinkedHashMap:

Questa lista collegata definisce l'iterazione ordinamento, che normalmente è dell'ordine in cui le chiavi sono state introdotte nel mappa (inserimento-ordine).

e dalla documentazione HashMap#keySet:

Il set [restituito] è sostenuta dalla mappa, quindi modifiche alla mappa si riflettono set, e viceversa.

+2

@ Tom ringrazia, non sono ancora convinto che ciò sia esplicito. Perché LinkedHashMap.keySet() non restituisce una sottoclasse di Set con un ordine fisso? – Armand

+4

Perché se restituisce un SortedSet, allora LinkedHashMap aggiungerebbe il requisito che le sue chiavi siano di un tipo che implementa Comparable o che sia fornita una funzione comparatore. Questo NON è richiesto dalla mappa. Controlla la documentazione SortedSet: http://download.oracle.com/javase/6/docs/api/java/util/SortedSet.html. Non avere questo requisito consente di utilizzare anche chiavi che non implementano Comparable per essere utilizzate in una LinkedHashMap, che è il caso più generale. L'implementazione di LinkedHashMap potrebbe anche restituire un SortedSet se le sue chiavi sono comparabili, ma semplicemente non è OBBLIGATORIO. –

+1

Naturalmente, il contratto di LinkedHashMap dice che mantiene l'ordinamento INSERTION, che potrebbe non essere l'ordinamento NATURALE. Quindi in tal caso, un SortedSet non funzionerebbe affatto - i tasti semplicemente non sarebbero ordinati in quel modo. –

32

Yes. L'eccezione è che quando una chiave viene reinserita, appare nell'ordine in cui è stata inserita per la prima volta nell'elenco.

+4

+1 buona presa su quella cassa d'angolo. –

+3

In realtà, l'eccezione è quando la chiave è ** reinserita **, non cancellata e riutilizzata.Il caso è quando chiamate 'put (chiave, valore)' per una chiave che era già nella mappa. (Il javadoc lo spiega chiaramente). –

Problemi correlati