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 Mapimplementacji dołączonych do Java 11.
NavigableMapInterfejs jest to, co SortedMappowinno być na pierwszym miejscu. SortedMapLogicznie 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 compareTometody Comparable( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) interfejs) lub przez Comparatorprzekazaną 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.
LinkedHashMapKlasa zwraca swoje wpisy w kolejności, w jakiej zostały one pierwotnie wstawionego .
EnumMapzwraca 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 DayOfWeekklasy 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ń.
