Как сказал Элиотт Фриш, ответ содержится в следующем предложении цитируемого вами абзаца:
… Этот связанный список определяет порядок итераций, то есть порядок, в котором элементы были вставлены внабор ( порядок вставки ).…
Метод addFirst
нарушил бы порядок вставки и, следовательно, идею дизайна LinkedHashSet
.
Если бы я мог добавить немного догадок, другие возможные причины могли быinclude:
- Это не так просто реализовать, как кажется, так как
LinkedHashSet
действительно реализован как LinkedHasMap
, где отображаемые значения не используются.По крайней мере, вам также придется изменить этот класс (который, в свою очередь, также нарушил бы его порядок вставки и, следовательно, его идею дизайна). - Как и предполагал другой парень в комментарии,они не сочли это полезным.
Тем не менее, вы задаете вопрос неправильно.Они разработали класс с функциональностью, в которой они видели необходимость.Они перешли к реализации, используя хеш-таблицу и связанный список.Вы начинаете с реализации и используете ее в качестве основы для обсуждения дизайна.Хотя иногда это может добавить что-то полезное, обычно это не путь к хорошим проектам.
Хотя теоретически я могу понять, что в вашей ситуации может возникнуть ситуация, когда вам понадобится двусторонняя очередь с заданным свойством (дубликаты)игнорируются / исключаются), мне трудно представить, когда Deque
не будет отвечать вашим потребностям в этом случае (Элиотт Фриш упомянул недоиспользуемый ArrayDeque
).Вам нужны довольно большие объемы данных и / или довольно строгие требования к производительности, прежде чем линейная сложность contains
и remove
станет непомерно высокой.И в этом случае вам, возможно, уже будет лучше разрабатывать собственную структуру данных.