В дополнение к ColinD и Искатель ответов.
Проще говоря, Итерируемый и Итератор оба являются интерфейсами, предоставляемыми в Java Collection Framework.
Iterable
Класс должен реализовать интерфейс Iterable, если он хочет иметь цикл for-each для итерации по своей коллекции. Однако цикл for-each можно использовать только для циклического перемещения по коллекции в прямом направлении, и вы не сможете изменять элементы в этой коллекции . Но если все, что вам нужно, это прочитать данные элементов, то это очень просто, и благодаря лямбда-выражению Java это часто один лайнер. Например:
iterableElements.forEach (x -> System.out.println(x) );
Итератор
Этот интерфейс позволяет перебирать коллекцию, получать и удалять ее элементы. Каждый из классов коллекции предоставляет метод iterator () , который возвращает итератор в начало коллекции. Преимущество этого интерфейса перед итеративным состоит в том, что с этим интерфейсом вы можете добавлять, изменять или удалять элементы в коллекции . Но для доступа к элементам требуется немного больше кода, чем для итерации. Например:
for (Iterator i = c.iterator(); i.hasNext(); ) {
Element e = i.next(); //Get the element
System.out.println(e); //access or modify the element
}
Источники:
- Java Doc Iterable
- Java Doc Iterator