2016-07-05 3 views
-4

Итератор имеет метод ---> hasNext(), который возвращает логическое значение, он имеет следующий(), который возвращает элемент. Может ли кто-нибудь сказать, если Iterator - это интерфейс, то как его абстрактные методы возвращают значение? Что такое внутренняя реализация?Интерфейс итератора с абстрактными методами hasNext() и next()?

+1

Посмотрите на него. В состав JDK входят источники. – Fildor

+4

Итераторы часто реализуются как частные классы. Например, в 'ArrayList' это' private class Itr реализует Iterator {...} ', а метод' iterator() 'просто возвращает новый экземпляр' Itr'. –

+0

Да, 'iterator' является интерфейсом и, как таковой, он не реализует методы. Методы предоставляются конкретными классами, реализующими интерфейс (например, ArrayList, который имеет частный класс Iterator). См. Этот код для примера: http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b27/java/util/ArrayList.java#ArrayList.Itr ' – jpw

ответ

2

Ну, реализация зависит от того, как вы получаете объект Iterator. Например, если у вас есть

List<String> list = new ArrayList<>(); 
Iterator<String> iterator = list.iterator(); 

вы получите объект класса Itr, который является частным классом ArrayList. Или для

List<String> list = new ArrayList<>(); 
ListIterator<String> iterator = list.listIterator(); 

вы получите объект ListItr. Аналогичные вещи случаются для Set. Все, что вам действительно нужно, это посмотреть на источники JDK.

0

Iterator - это интерфейс, и весь объект коллекции java имеет свою собственную реализацию (т. Е. Новый интерфейс IteratorType, реализующий интерфейс Iterator) в классе.

+0

Это нормально , Но не могли бы вы дать мне код, где мы реализуем hasNext(). – Himanshu

0

Интерфейс может быть реализован многими различными классами. Это зависит от того, какую коллекцию вы назвали методом .iterator(), реализация которого вы получаете.

При создании итератора из ArrayList, например, я вижу (в Java 8), что реализация:

private class Itr implements Iterator<E> { 
... 

Этот класс является внутренним классом класса ArrayList. Другие классы Iterable обеспечат другие реализации интерфейса Iterator.

0

Iterator - это интерфейс на Java. Он присутствует в java.util упаковку java.util.Iterator

Когда Iterator реализуется классом, который является подклассом интерфейса Collection, который в свою очередь является расширение интерфейса Iterable, мы можем получить iterator() объект.

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

ArrayList a = new ArrayList(); 

    a.add("AA"); 
    a.add("BB"); 
    // Use iterator to display contents of a 

    Iterator iterator = a.iterator(); 
    while(iterator.hasNext()) { 
    Object element = iterator.next(); 
    ... 
    } 

Итак, мы видим, что мы не непосредственно с помощью next() или hasNext() методов из интерфейса, а мы используя их, получая iterator() объект из класса который реализует интерфейс Iterator

Смежные вопросы