Есть ли причины, по которым EnumMap и EnumSet не являются судоходными
Enum is Comparable, что означает, что вы можете иметь
NavigableSet<AccessMode> modes = new TreeSet<>();
NavigableMap<AccessMode, Object> modeMap = new TreeMap<>();
Они имеют время доступа O (ln N).
Коллекции Enum имеют O (1) время доступа, но не являются навигационными
NavigableSet<AccessMode> modes = EnumSet.noneOf(AccessMode.class); // doesn't compile
NavigableMap<AccessMode, Object> modeMap = new EnumMap<>(AccessMode.class); // doesn't compile
Мне было интересно, была ли причина того, что коллекции Enum не были Navigable (и отсортированы). i.e Я что-то пропустил?
Ответы
Ответ 1
Моя лучшая догадка заключается в том, что навигационная способность не рассматривалась как основной прецедент для наборов перечислений. В реализации нет ничего, что могло бы предотвратить навигацию. Редкие случаи использования, которые сочетают необходимость набора элементов перечисления с навигацией, покрываются TreeSet
и TreeMap
.
Ответ 2
Многие "очевидные" функции отсутствуют в JDK и его различных API. Почему эта особенность была опущена/забыта? Мы можем только догадываться. Но ваш вопрос был RFE на Sun/Oracle в течение длительного времени:
Вы можете поддержать эти RFE, комментируя их. Обратите внимание, что здесь авторитетный ответ Джошуа Блоха по этому вопросу:
Я смутно вспоминаю об этом, но не могу вспомнить, явно отклонил его с полным основанием. Мы бежали очень низко когда я реализовал EnumSet и EnumMap, и возможно, что время сыграло свою роль в нашем решении
http://comments.gmane.org/gmane.comp.java.jsr.166-concurrency/2158
Так даже он должен был догадаться: -)
Ответ 3
Сообщение не отвечает непосредственно на вопрос, ни попытки, он просто передает, почему Navigable был представлен
Опубликовать, поскольку мне было предложено (и это слишком долго для комментария)
Короткий ответ заключается в том, что Navigable существует, потому что у нас не было что-то вроде предстоящих "защитников" - "Сортировка" не описывала все общей функциональности, и не было никакого способа сделать это, кроме как ввести новый интерфейс. На практике я уверен, что "Сортировка" по-прежнему используется гораздо чаще, чем "Navigable" в качестве типа объявления, потому что большинству людей не нужны методы, определенные в навигационном, но не Критерий сортировки. Плюс "Navigable" - это просто не очень приятное имя: -)
-Doug