2012-03-13 13 views
5

Wiem, że .keySet() zwraca zestaw, który nie jest uporządkowany.Czy hashmap.keyset() zwróci klucze w kolejności, w jakiej zostały dodane do mapy mieszającej?

O ile mi wiadomo, oznacza to, że muszę przechowywać listę tablic kluczy, aby śledzić kolejność dodawania kluczy do mapy kontrolnej, prawda?

+1

możliwe duplikat [Zachowanie Keyset LinkedHashMap użytkownika() i wartości() metody] (http://stackoverflow.com/questions/9583650/behaviour-of-linkedhashmaps-keyset-and-values -methods) –

+0

Jest to raczej uwaga dotycząca "Zachowania * metody HashMap * keySet". – aioobe

Odpowiedz

8

[...] co oznacza, że ​​muszę zachować listę tablic kluczy, aby śledzić kolejność dodawania kluczy do mapy kontrolnej, prawda?

Tak, zgadza się. Lub możesz użyć narzędzia LinkedHashMap, które robi to za Ciebie.

Z dokumentacji:

[...] Implementacja ta różni się od HashMap tym, że utrzymuje podwójnie połączonej listy biegnącej przez wszystkich swoich wpisów. Ta połączona lista definiuje kolejność iteracji, , która jest zwykle kolejnością, w której klucze zostały wstawione do mapy (kolejność wstawiania). [...]

+0

Inną możliwością jest TreeMap. Zauważ, że wszystkie te klasy to gwarancja, że ​​iteracja będzie w porządku, a nie to, że Set zwrócony przez keySet() będzie miał określoną kolejność. –

+0

powiązane hashmap wygląda jak to, czego potrzebuję. Jak przesłonić metodę removeEldestEntry, aby była przekazywana tylko według zamówienia reklamowego - nie ma dostępu do zamówienia? – bernie2436

+0

Hmm. Nie wiesz, co masz na myśli, określając kolejność dostępu. Najstarszym wpisem jest prawdopodobnie klucz, który został po raz pierwszy wstawiony. – aioobe

Powiązane problemy