Я отвечу на вопрос, особенно о ArrayList, в качестве примера, чтобы помочь вам лучше понять.
- Итерируемый интерфейс заставляет свои подклассы реализовывать абстрактный метод 'iterator ()'.
public interface Iterable {
...
abstract Iterator<T> iterator(); //Returns an 'Iterator'(not iterator) over elements of type T.
...
}
Интерфейс итератора заставляет его подклассы реализовывать абстрактный метод hasNext () и next ().
public interface Iterator {
...
abstract boolean hasNext(); //Returns true if the iteration has more elements.
abstract E next(); //Returns the next element in the iteration.
...
}
ArrayList реализует List, List реализует Collection и Collection реализует Iterable .. То есть вы могли видеть взаимосвязь, такую как
'Iterable <- Collection <- List <- ArrayList' </p>
.И Iterable, Collection и List просто объявляют абстрактный метод iterator (), и только ArrayList реализует его.
Я собираюсь показать исходный код ArrayList с помощью метода «iterator ()» следующим образом для получения более подробной информации.
Метод «iterator ()» возвращает объект класса «Itr», который реализует'Итератор'.
public class ArrayList<E> ... implements List<E>, ...
{
...
public Iterator<E> iterator() {
return new Itr();
}
private class Itr implements Iterator<E> {
...
public boolean hasNext() {
return cursor != size;
}
@SuppressWarnings("unchecked")
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}
...
}
}
Некоторые другие методы или классы будут перебирать элементы коллекций, например ArrayList, используя Iterator (Itr).
Вот простой пример.
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
String string = iterator.next();
System.out.println(string);
}
}
Теперь понятно?:)