2011-01-27 18 views
19

Próbuję umieścić pewne kluczowe wartości w Mapie i próbować pobrać je w tej samej kolejności, w jakiej zostały wstawione. Na przykład poniżej jest mój kodjak zdobyć klucze w Mapie z tą samą sekwencją, w jakiej zostały wstawione

import java.util.*; 
import java.util.Map.Entry; 

public class HashMaptoArrayExample { 

    public static void main(String args[]) 

    { 
    Map<String,Integer> map= new HashMap<String,Integer>(); 

    // put some values into map 

    map.put("first",1); 
    map.put("second",2); 
    map.put("third",3); 
    map.put("fourth",4); 
    map.put("fifth",5); 
    map.put("sixth",6); 
    map.put("seventh",7); 
    map.put("eighth",8); 
    map.put("ninth",9); 



    Iterator iterator= map.entrySet().iterator(); 
     while(iterator.hasNext()) 
     { 
      Entry entry =(Entry)iterator.next(); 
      System.out.println(" entries= "+entry.getKey().toString()); 
     } 

    } 
} 

Chcę odzyskać klucze jak poniżej

first second third fourth fifth sixth ..... 

Ale to wyświetlanie w jakiejś przypadkowej kolejności jak niżej w moim wyjściu

OUTPUT 

ninth eigth fifth first sixth seventh third fourth second 
+0

Powielony? http://stackoverflow.com/questions/663374/java-ordered-map –

+0

java.util.LinkedHashMap i nigdy/nigdy nie używaj java.util.HashMap, chyba że masz bardzo silny powód (tj. mniejszy ślad pamięci i brak iteracji). imo, HashMap to najgorsza struktura danych w java.util (być może pobita tylko przez java.util.Stack) – bestsss

+0

@msalvadores Niezupełnie. Ten dotyczył sortowania wpisów (alfabetycznie, na przykład), ten dotyczy ich zwrotu w takiej samej kolejności, w jakiej zostały dodane do mapy. – biziclop

Odpowiedz

53

Nie można tego zrobić z HashMap, która nie zachowuje zamówienia reklamowego w dowolnym miejscu jego danych. Spójrz na LinkedHashMap, który został zaprojektowany dokładnie w celu utrzymania tej kolejności.

+0

Wielkie dzięki. To działało świetnie. Ostatnie pytanie. Zamiast używania iterator.hasNext() można użyć zaawansowanej pętli for – JavaGeek

+0

@Sukumar: Absolutnie: 'for (Map.Entry <..,..> wpis: map.entrySet()) {...}'. –

+1

na pewno możesz (dla x: y) jest skutecznie kompilowany do iteratora; hasNext(), next() – bestsss

3

HashMap jest tablica skrótów. Oznacza to, że kolejność wstawiania kluczy jest nieistotna, ponieważ nie są one przechowywane w tej kolejności. W momencie włożenia kolejnego klucza informacja o tym, jaki był ostatni klucz, została zapomniana.

Jeśli chcesz zapamiętać zamówienie reklamowe, musisz użyć innej struktury danych.

+0

..... który? – CodyBugstein

+0

@Imray Spójrz na odpowiedź Jona. –

Powiązane problemy