тл; д-р
Для збереження 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. Цей перелік визначається з понеділка першого та останнього неділі. Тож записи в ітераторі з’являться в тому порядку.
Інші шість реалізацій не обіцяють щодо порядку, в якому вони повідомляють про свої записи.
