Назад к вопросам
Middle
70
questionbank
Могу ли я реализовать улучшенный цикл for-each для своего объекта?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Да, можете. Для этого ваш объект должен реализовывать интерфейс Iterable.
Интерфейс Iterable содержит единственный метод iterator(), который должен возвращать объект, реализующий интерфейс Iterator.
Интерфейс Iterator содержит два основных метода:
hasNext(): Возвращает true, если имеются еще элементы для итерации.next(): Возвращает следующий элемент в итерации.
Опционально Iterator может содержать метод remove() для удаления текущего элемента.
Пример реализации:
import java.util.Iterator;
import java.util.ArrayList;
import java.util.List;
class MyCollection<T> implements Iterable<T> {
private List<T> elements = new ArrayList<>();
public void add(T element) {
elements.add(element);
}
@Override
public Iterator<T> iterator() {
return new MyIterator();
}
private class MyIterator implements Iterator<T> { // Внутренний класс для Iterator
private int currentIndex = 0;
@Override
public boolean hasNext() {
return currentIndex < elements.size();
}
@Override
public T next() {
if (!hasNext()) {
throw new java.util.NoSuchElementException();
}
return elements.get(currentIndex++);
}
// Опциональный метод для удаления элемента
@Override
public void remove() {
if (currentIndex <= 0) {
throw new IllegalStateException();
}
elements.remove(currentIndex - 1);
currentIndex--; // Не забываем сместить индекс после удаления
}
}
}
class Main {
public static void main(String[] args) {
MyCollection<String> collection = new MyCollection<>();
collection.add("Элемент 1");
collection.add("Элемент 2");
collection.add("Элемент 3");
// Использование улучшенного цикла for-each
for (String element : collection) {
System.out.println(element);
}
// Пример использования итератора напрямую с удалением
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
String element = iterator.next();
if ("Элемент 2".equals(element)) {
iterator.remove();
}
}
System.out.println("\nПосле удаления:");
for (String element : collection) {
System.out.println(element);
}
}
}
После реализации Iterable, ваш объект сможет быть использован в конструкциях for (ElementType element : yourObject) { ... }.