EnumMap<K extends Enum<K>, V>
в Java четко упорядочено по определению связанного перечисления, как вы также можете увидеть в javadoc:
Карты перечислений поддерживаются в естественном порядке их ключей (порядок, в котором объявляются константы перечисления). Это находит свое отражение в итераторах возвращенного видом коллекций ( keySet()
, entrySet()
и values()
).
Что мне нужно, так это SortedMap
использование enum в качестве типа ключа. Я хочу использовать такие методы, как headMap()
или firstKey()
, но я хочу получить выгоду от дополнительной производительности процессора + памяти EnumMap
s. А TreeMap
звучит как слишком много накладных расходов здесь.
Вопрос : было ли это просто пропущено при реализации, было ли это ленью (полученной из AbstractMap
) или есть веская причина, почему EnumMap
это не так SortedMap
?
TreeMap
?Ответы:
Это не даст ответа на ваш основной вопрос (потому что ответ есть только у оригинальных дизайнеров), но один из подходов, который я рассматривал, состоял в том, чтобы вы реализовали его самостоятельно. Пытаясь сделать
SortedMap
реализацию на основеEnumMap
, я придумал следующий класс.Это, безусловно , быстрый и грязный реализации (и обратите внимание , что это не в полной мере соответствует требованиям
SortedMap
- поскольку зрения требований не выполнено), но если вам нужен один, вы можете улучшить его:И для быстрого теста (ошибки еще не найдены):
Я получил:
источник
Запрос на открытую функцию
Я смог найти эту проблему для OpenJDK . Это с 2005, но все еще открыто / неразрешено.
Я бы предположил, что нет «веских причин» для того, чтобы это не было реализовано.
источник