У меня есть собственный, общий, одиночный LinkedList, который я создал сам. Я могу добавлять, удалять и т. д. в список просто отлично. Я хотел бы реализовать Java ListIterator в своем классе. Как мне начать это делать? Какие методы мне нужно добавить в мой класс? Все, что я могу найти в Интернете, - это примеры использования ListIterator в Java LinkedList по умолчанию, что мне не подходит. Спасибо!
Использование ListIterator в пользовательском LinkedList
Ответы (5)
Вы создаете второй класс (обычно это вложенный класс вашего связанного списка), который реализует все функции интерфейса ListIterator. Обратите внимание, что некоторые функции (например, add
и remove
) являются необязательными, вы можете просто создать исключение UnsupportedOperationException. Ваш класс связанного списка должен реализовать методы listIterator()
и listIterator(int)
, чтобы вернуть экземпляр вашего второго класса.
Вам следует реализовать итератор или ListIterator.
Найдите методы, которые есть у ListIterator. Вам нужно будет убедиться, что ваша версия имеет те же самые методы.
Если можете, найдите Interface
, который использует ListIterator, и реализуйте этот интерфейс.
Для повышения производительности вы можете реализовать ListIterator
и сохранить «обратную» версию списка по мере его повторения. Это будет эмулировать двусвязный список, но только для итератора.
Однако, вероятно, безопаснее просто реализовать свой связанный список как двусвязный список внизу.
Если это односвязный список, реализация ListIterator
будет сложной (если вообще возможной), так как она должна перемещаться в обоих направлениях, что вы можете реализовать, только перезапуская голову снова и снова.
Либо сделайте свой список двусвязным, либо вам придется накидать UnsupportedOperationException
на множество методов. (Или жить с производительностью O (n) в половине методов)
previous()
; это не один из методов, задокументированных как необязательные. Кроме того, почему одиночный (прямой) связанный список имеет производительность O (n) для next()
?
- person Ted Hopp; 27.04.2011
ListIterator
разумным образом в односвязном списке, посколькуListIterator
требует поддержки обратного обхода, а это просто невозможно с односвязным списком! - person Joachim Sauer   schedule 27.04.2011