Использование ListIterator в пользовательском LinkedList - PullRequest
2 голосов
/ 27 апреля 2011

У меня есть собственный, общий, одиночный LinkedList, который я создал сам. Я могу добавить, удалить и т. Д. В список просто отлично. Я хотел бы реализовать Java ListIterator для моего класса. Как мне начать это? Какие методы мне нужно добавить в мой класс? Все, что я могу найти в Интернете, это примеры использования ListIterator в Java LinkedList по умолчанию, который мне не подходит. Спасибо!

Ответы [ 5 ]

1 голос
/ 27 апреля 2011

Вы создаете второй класс (обычно вложенный класс вашего связанного списка), который реализует все функции интерфейса ListIterator. Обратите внимание, что некоторые функции (например, add и remove) являются необязательными - вы можете просто выбросить исключение UnsupportedOperationException. Класс связанных списков должен реализовывать методы listIterator() и listIterator(int) для возврата экземпляра вашего второго класса.

1 голос
/ 27 апреля 2011

Вы должны реализовать интерфейс Iterator или ListIterator .

0 голосов
/ 27 апреля 2011

Для повышения производительности вы можете реализовать ListIterator и сохранять «обратную» версию своего списка при его итерации по нему.Это будет эмулировать двусвязный список, но только для итератора.

Однако, вероятно, безопаснее просто реализовать свой связанный список в виде двусвязного списка под ним.

0 голосов
/ 27 апреля 2011

Если это односвязный список, реализация ListIterator будет непростой (если не невозможной), поскольку она требует навигации в обоих направлениях, которую вы можете реализовать, перезапуская с головы снова и снова.

Либо сделайте свой список двойным, либо вам придется бросить UnsupportedOperationException на множество методов. (Или жить с O (N) производительности в два раза меньше методов)

0 голосов
/ 27 апреля 2011

Ищите методы, которые есть в ListIterator. Вам нужно убедиться, что ваша версия имеет те же методы.

Если вы можете, найдите Interface, который использует ListIterator, и реализуйте этот интерфейс.

...