тл; д-р
Для збереження Map< Integer , String >
в порядку, відсортованому за ключовими словами, використовуйте будь-який з двох класів, що реалізують SortedMap
/ NavigableMap
інтерфейси:
TreeMap
ConcurrentSkipListMap
Якщо ви маніпулюєте картою в одному потоці, використовуйте перший TreeMap
,. Якщо маніпулюючи різними потоками, використовуйте другий, ConcurrentSkipListMap
.
Детальніше дивіться у таблиці нижче та наступному обговоренні.
Деталі
Ось графічна таблиця, яку я склав, що показує особливості десяти Map
реалізацій в комплекті з Java 11.
NavigableMap
Інтерфейс , що SortedMap
має бути в першу чергу. SortedMap
Логічно повинні бути видалені , але не може бути , як деякі карти реалізації третьої сторони може використовувати інтерфейс.
Як ви бачите в цій таблиці, лише два класи реалізують SortedMap
/ NavigableMap
інтерфейси:
Обидва ці ключі зберігають у відсортованому порядку або за їх природним порядком (використовуючи compareTo
метод Comparable
( https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ Comparable.html ) інтерфейс) або через Comparator
передачу, яку ви проходите. Різниця між цими двома класами полягає в тому, що другий ConcurrentSkipListMap
, є безпечним для потоків , високо сумісним .
Дивіться також стовпець Порядок ітерацій у таблиці нижче.
LinkedHashMap
Клас повертає свої записи по порядку , в якому вони були спочатку вставлені .
EnumMap
повертає записи в тому порядку, в якому визначається клас enum ключа . Наприклад, карта якого співробітника покриває, який день тижня ( Map< DayOfWeek , Person >
) використовує DayOfWeek
клас enum, вбудований у Java. Цей перелік визначається з понеділка першого та останнього неділі. Тож записи в ітераторі з’являться в тому порядку.
Інші шість реалізацій не обіцяють щодо порядку, в якому вони повідомляють про свої записи.