2015-10-12 3 views
-3

Я изучаю базовый интерфейс и классы пакета Java.util. Теперь интерфейс Set является подклассом Collection и Iterable, поэтому Set имеет Iterator moudle. Итак, почему я использую ссылку интерфейса Iterator?Вопросы об интерфейсе Iterator

Iterator<String> iterx = x.iterator(); 

Iteratr также является интерфейсом. Но я не вижу никакого отношения к интерфейсу Iterable и интерфейсу Iterator. Iterable имеет moudle, который называется Iterator. это не было бы правильнее написать

Iterable.Iterator iterx = x.iterator(); 

Поскольку x.iterator вызвать Moudle, что набор унаследовали от Iterable, и не вызвать интерфейс итератора.

Что я не понимаю?

+0

Не знаете, что вы просите, но имя квалифицированного класса ('java.lang.Iterable'), которое вы записываете в свой код, не имеет ничего общего с наследованием. – zapl

+0

Метод итератора (с результатом типа «Итератор») - это то, что должен обеспечить класс, реализующий «Итерируемый». –

ответ

0

Интерфейс Iterable говорит, что конкретная коллекция является итерируемой, что означает, что вы можете перебирать ее с помощью Iterator.

У него есть только один метод, который итератор() возвращает итератор. Любая коллекция, например. Список, который реализует Iterable, обеспечивает реализацию метода iterator().

Iterator также является интерфейсом, который определяет процесс итерации, который предоставляет следующие методы(), hasNext() и remove(), которые могут использоваться для управления итерацией, доступа к элементу и их удаления.

+0

да, но как можно связать интерфейс Iterator с моим объектом? Интерфейс Iterator и интерфейс Iterable не имеют никакого отношения. Нельзя ли итерабельный вызов интерфейса итератора? –

+0

Создайте внутренний класс для реализации Iterator так же, как ArrayList –

0

Iterator<String> используется по той же причине вы используете String в

String stringx = x.toString() 

метод (правильное название «модуль») заявляет, что она возвращает вам объект этого типа. Методы могут возвращать любой несвязанный тип, и вам придется настраивать и использовать тип переменной, который они вам дают.

Iterator концептуально связан с Iterable, но они не наследуются друг от друга или около того. И на самом деле это просто соглашение о том, что Iterator предоставляет вам доступ к тем же данным, что и Iterable.

Но дизайн/условность для Iterator является то, что вы можете перебирать раз в жизни итератора над коллекцией предметов (повторяющимися hasNext()? Ok дать next()! Снова и снова до тех пор, пока нет рядом.). Если вы хотите снова итерации, вам нужно будет получить свежий Iterator. И это ответственность Iterable: он может производить свежий Iterator каждый раз, когда вы его спрашиваете.