2015-07-04 3 views
-2

Я искал в JavaDoc, Iterator в java - это интерфейс. Но если это интерфейс, то где реализация hasNext, next, удалить методы интерфейса итератора.Что такое итератор в Java?

Я попытался найти в Stackoverflow для этого вопроса, и я придумал эту тему.

Where are Iterator interface methods hasNext(), next(), remove() defined? Because interfaces never define methods only declare

Как упоминалось в выше нить его реализация скрыта Но почему она скрыта?

+1

Похоже, ваш вопрос на самом деле не о итераторах конкретно, но интерфейсы в целом - это до класса, который реализует интерфейс, чтобы обеспечить реализацию ... –

+0

В ссылке, которую вы дали , есть причина также указать, почему он скрыт ... – Codebender

+0

Да, поэтому, если я использую класс arrayList класса framework, то он не имеет какой-либо реализации этих методов. Вот почему я задал этот вопрос. @JonSkeet – Avin

ответ

1

Насколько я понимаю, вы применяете этот метод для своих данных, структурированных в соответствии с интерфейсом. Для методов hasNext(), next() и remove() не существует.

Конкретные классы имеют реализацию этих (реализация по умолчанию). Подобно LinkedList проходит по порядку. Для итерации в любом другом порядке вы можете реализовать интерфейс. Ниже приведен пример итерации в обратном порядке:

@Override 
public Iterator<Type> iterator() { 
    Iterator<Type> it = new Iterator<Type>() { 

     private int currentIndex = arrayList.size(); 

     @Override 
     public boolean hasNext() { 
      return arrayList[currentIndex] != null; 
     } 

     @Override 
     public Type next() { 
      return arrayList[currentIndex--]; 
     } 

     @Override 
     public void remove() { 
      throw new UnsupportedOperationException(); 
     } 
    }; 
    return it; 
} 
+0

Тогда как он проверяет наличие следующего объекта и удаляет его в коллекции без какой-либо реализации? – Avin

+0

Каждая индивидуальная/конкретная реализация имеет собственную проверку. –

1

Это идея интерфейса. Как правило, при программировании более слабое соединение у вас между объектами, тем лучше. Только интерфейс специально предназначен для коллекций. Ожидается, что от клиента НЕ ЗНАЮ (или, лучше, нет причин знать), как выглядит реализация итератора, клиент ожидает описанное поведение от итератора - проверьте, имеет ли следующий элемент, получите следующий элемент. То, как оно реализовано, не имеет значения, и только для него это важно. Дело в том, что вы хотите использовать его, и вы должны знать только концепцию самого итератора.

Это причина почему скрыт

1

Интерфейсы только чертежи. Они сказали, ЧТО делать, а не КАК. Классы, которые реализуют интерфейс X (например, Iterator), ДОЛЖНЫ сказать, КАК делать. Если вы посмотрите исходный код ArrayList, вы увидите реализацию методов Iterator, например ArrayList.java

+0

Получил, +1 к вашему ответу. Интересно, почему член сообщества отметил -1 на вопрос. – Avin

+2

@Avin: Возможно, потому, что ваш вопрос подразумевает возможность использования одного интерфейса, но на самом деле касается интерфейсов в целом - и, вероятно, он мог бы получить ответы на себя с меньшим количеством исследований. Сдвиг не был моим, но я могу это понять. –

+1

Зачем писать это как скриншот, а не как текст? –

0

После некоторого исследования я придумал этот ответ, чтобы объяснить лучший сценарий, реализация итератора выполняется как внутренний класс. Причина, почему ? Читать изображение:

Справка: Учебник по Java, 3-е издание.

enter image description hereenter image description here