tl; dr
Aby utrzymać Map< Integer , String >
porządek posortowany według klucza, użyj jednej z dwóch klas implementujących interfejsy SortedMap
/ NavigableMap
:
TreeMap
ConcurrentSkipListMap
Jeśli manipulujesz mapą w jednym wątku, użyj pierwszego TreeMap
,. Jeśli manipulowania drugiej nici, użyj drugiego, ConcurrentSkipListMap
.
Aby uzyskać szczegółowe informacje, zobacz poniższą tabelę i następującą dyskusję.
Detale
Oto tabela graficzna, którą stworzyłem, pokazującą funkcje dziesięciu Map
implementacji dołączonych do Java 11.
NavigableMap
Interfejs jest to, co SortedMap
powinno być na pierwszym miejscu. SortedMap
Logicznie powinien być usunięty, ale nie może być tak niektóre implementacje map 3rd-Party można za pomocą interfejsu.
Jak widać w tej tabeli, tylko dwie klasy implementują interfejsy SortedMap
/ NavigableMap
:
Oba te klucze trzymają w uporządkowanej kolejności, według ich naturalnej kolejności (przy użyciu compareTo
metody Comparable
( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) interfejs) lub przez Comparator
przekazaną implementację. Różnica między tymi dwiema klasami polega na tym, że druga ConcurrentSkipListMap
, jest bezpieczna dla wątków , wysoce współbieżna .
Zobacz także kolumnę Kolejność iteracji w poniższej tabeli.
LinkedHashMap
Klasa zwraca swoje wpisy w kolejności, w jakiej zostały one pierwotnie wstawionego .
EnumMap
zwraca wpisy w kolejności, w której zdefiniowana jest klasa enum klucza . Na przykład mapa, której pracownik pokrywa, który dzień tygodnia ( Map< DayOfWeek , Person >
) korzysta z DayOfWeek
klasy enum wbudowanej w Javę. To wyliczenie jest zdefiniowane w poniedziałek pierwszy i niedziela ostatni. Wpisy w iteratorze pojawią się w tej kolejności.
Pozostałe sześć implementacji nie obiecuje kolejności zgłoszeń.