Я не верю, но реализация собственного LinkedHashSet, который может это сделать, займет у вас двадцать минут.
Вам нужны два класса, тривиальный класс узла, который содержит ваш ключ, значение и указатель nextNode, и новый класс "LinkedHashSet".
Помимо стандартных методов получения, ваш класс узла должен реализовывать equals и хеш для делегирования в key.equals и key.hash ...
Ваш LinkedHashSet должен содержать HashSet, указатель на первый узел и несколько вспомогательных методов, чтобы его пользователю никогда не приходилось видеть объекты HashSet или Node (они оба должны быть пакетными, а не публичными).
Просто создайте связанный список, используя ваши узлы так же, как и любой другой связанный список, но в то же время добавьте узел в хэш-карту. Переопределенные методы в Node гарантируют, что значения могут быть найдены на карте, но для добавления вам придется пройти по всему списку, начиная с узла Head, так же, как и с любым связанным списком.
После этого просто реализуйте методы пересылки для добавления, удаления и всего, что вам нужно. Внедрение LinkedHashSet.getNext (item) так же просто, как поиск узла элемента и получение его nextNode, извлечение элемента из следующего узла и его возврат.
Единственное, что немного сложно, для любого поиска, такого как get (item), вам нужно будет реализовать что-то вроде этого (Извините, что у меня нет обобщений):
public Object get(Item item) {
node=new Node(item);
hashSet.get(node);
return node.itemValue();
}
Обратите внимание, что вы должны заключать элемент в узел, даже если это поиск - для правильной работы хешу это потребуется.
Пока я пишу небольшой код, вот код для getNext (item)
public Object getNext(Item item) {
node=new Node(item);
hashSet.get(node);
return node.getNextNode().itemValue();
}
В любом случае, это 20-минутное усилие и очень познавательное - просто сделайте это.