Как эффективно удалить узел из java LinkedList по ссылке на объект или на конкретный узел? использование remove (object) использует обход по всему списку, о чем свидетельствует документация: "удаляет первый элемент e такой, что (o == null? e == null: o.equals(e))". Можно ли удалить конкретную ссылку на узел? Я не возражаю хранить ссылку на узел в самом объекте. Я не могу использовать индекс списка, поскольку он может измениться. Если нет, есть ли другая структура данных, которая позволила бы мне это сделать?
Попробуйте использовать LinkedHashSet. Это в основном HashSet
с детерминированным порядком его элементов. Или, альтернативно, вы можете просмотреть его как LinkedList
поддерживаемый с помощью таблицы поиска элементов.
Я считаю, что операция remove(Object)
будет постоянной.
Вы можете использовать HashSet
Удаление, вставка в целом в постоянное время, как указано официальным API:
Этот класс предлагает постоянную производительность по времени для основных операций (добавление, удаление, наличие и размер), предполагая, что хеш-функция правильно распределяет элементы среди ковшей
Если вы решите использовать HashSet
, не забудьте переопределить оба метода equals
AND hashcode
в вашем объекте.
LinkedHashSet
. Но хеширование - это не «обходной путь»
LinkedList
? Если ваш собственный, это зависит от того, как вы это реализовали. Что вы пробовали? Можете ли вы опубликовать соответствующий код и описать возникшую проблему? Что касается других структур данных, это зависит от ваших требований. Вы должны быть более конкретными.