Come mantenere l’ordine di inserimento utilizzando le raccolte

Voglio aggiungere una chiave, una coppia di valori in una tabella hash (o qualsiasi altra raccolta), ma devo mantenere l’ordine di inserimento. Come posso fare questo?

Come aggiungerò 1 come chiave “uno” come valore, 2 come chiave e “due” come valore.

L’output dovrebbe essere ordinato come:

1:one 2:two 

Ecco le differenze caratteristiche di alcune importanti implementazioni della Map :

  • LinkedHashMap : “con ordine di iterazione prevedibile […] che normalmente corrisponde all’ordine in cui le chiavi sono state inserite nella mappa ( ordine di inserimento ).”
  • HashMap : “non garantisce l’ordine della mappa”
  • TreeMap : “è ordinato secondo l’ordine naturale delle sue chiavi, o da un Comparator
    • cioè è una SortedMap

Quindi sembra che LinkedHashMap sia ciò di cui hai bisogno in questo caso.

Ecco uno snippet per illustrare le differenze; mostra anche un modo comune per scorrere tutte le voci di una Map e il modo in cui l’utilizzo di un’interfaccia per fare riferimento agli oggetti consente una grande flessibilità nella scelta dell’implementazione.

 import java.util.*; public class MapExample { public static void main(String[] args) { populateThenDump(new HashMap()); populateThenDump(new TreeMap()); populateThenDump(new LinkedHashMap()); } static void populateThenDump(Map map) { System.out.println(map.getClass().getName()); map.put("Zero", 0); map.put("One", 1); map.put("Two", 2); map.put("Three", 3); map.put("Four", 4); for (Map.Entry entry : map.entrySet()) { System.out.println(entry.getKey() + " => " + entry.getValue()); } } } 

L’output dello snippet sopra riportato è ( come visto su ideone.com ):

 java.util.HashMap // unordered, results may vary Three => 3 Zero => 0 One => 1 Four => 4 Two => 2 java.util.TreeMap // ordered by String keys lexicographically Four => 4 One => 1 Three => 3 Two => 2 Zero => 0 java.util.LinkedHashMap // insertion order Zero => 0 One => 1 Two => 2 Three => 3 Four => 4 

Domande correlate

  • Iterate Over Map
  • iterando e rimuovendo da una mappa
    • Se si desidera modificare la mappa durante l’iterazione, è necessario utilizzare il suo Iterator .

Domande simili

  • Come mantenere l’ordine degli elementi nella tabella hash
  • EntrySet () in LinkedHashMap garantisce anche l’ordine?
  • Classe Java che implementa la mappa e mantiene l’ordine di inserimento?
  • Implementazione mappa lista ordinata in Java

Per la tabella hash, usa la class LinkedHashMap .

La tua ricerca termina su LinkedHashMap ….. 🙂