Java создание итератора для пользовательской структуры данных - PullRequest
1 голос
/ 12 мая 2011

Итак, вот что у меня есть:

  • 1 интерфейс с именем Set
  • 1 абстрактный класс, который реализует набор
  • 2 классов, расширяющих абстрактный класс, называемый ArraySet и ListSet

Итак, в Set я утверждаю Iterator <String> iterator();, а затем в моих 2 неабстрактных классах есть вложенные классы, которые называются ArrayIterator и ListIterator, которые реализуютфункциональность итератора.Но компилятор жалуется, что ArraySet и ListSet должны реализовывать Set.iterator().Как сделать так, чтобы компилятор распознал, что ArrayIterator и ListIterator являются реализациями Set.iterator()?

Так что это выглядит как

interface Set extends Iterable< String > {  
...  
Iterator< String > iterator(); }  




class ArraySet extends AbstractClass {  
 ...  
    class ArrayIterator implements Iterator< String > { ... }  
 ...  
}  

Ответы [ 2 ]

1 голос
/ 12 мая 2011

Вам необходимо реализовать Set.iterator() в ваших неабстрактных классах ArraySet и ListSet, то есть:

В ArraySet:

Iterator<String> iterator() {
    // do something, probably return ArrayIterator ?
}

In ListSet:

Iterator<String> iterator() {
    // do something, probably return ListIterator ?
}

Кроме того, я предполагаю, что и ArrayIterator, и ListIterator реализуют Iterator

0 голосов
/ 12 мая 2011

Я знаю, что это не прямой ответ на ваш вопрос. Но просто ради знаний вы можете захотеть узнать, что такое внутренний итератор и что такое внешний итератор? Ссылка: книга Design Pattern от GoF

или иначе посмотрите на это

...