更新時(shí)間:2023-08-01 來(lái)源:黑馬程序員 瀏覽量:
在Java中,我們可以自己編寫(xiě)一個(gè)容器類(lèi),并且可以使用for-each循環(huán)(也稱(chēng)為增強(qiáng)型for循環(huán)或foreach循環(huán))遍歷容器中的元素。要實(shí)現(xiàn)這一點(diǎn),我們的容器類(lèi)必須滿足以下條件:
我們的容器類(lèi)必須實(shí)現(xiàn)java.lang.Iterable接口。該接口包含一個(gè)名為iterator() 的方法,該方法返回一個(gè)實(shí)現(xiàn)了java.util.Iterator接口的對(duì)象,用于遍歷容器中的元素。
我們的容器類(lèi)還必須實(shí)現(xiàn)java.util.Iterator接口。Iterator接口定義了幾個(gè)方法,如hasNext()(判斷是否有下一個(gè)元素)、next()(返回下一個(gè)元素)和remove()(從容器中移除當(dāng)前元素,可選操作)。
接下來(lái)筆者用一個(gè)具體的代碼示例,演示下如何創(chuàng)建一個(gè)自定義容器類(lèi)并使用for-each循環(huán)遍歷它:
import java.util.Iterator; // 自定義容器類(lèi) class MyContainer<T> implements Iterable<T> { private T[] elements; private int size; @SuppressWarnings("unchecked") public MyContainer(int capacity) { elements = (T[]) new Object[capacity]; size = 0; } public void add(T element) { elements[size++] = element; } @Override public Iterator<T> iterator() { return new MyIterator(); } // 自定義迭代器類(lèi) private class MyIterator implements Iterator<T> { private int currentIndex = 0; @Override public boolean hasNext() { return currentIndex < size; } @Override public T next() { return elements[currentIndex++]; } } } public class Main { public static void main(String[] args) { MyContainer<String> container = new MyContainer<>(3); container.add("Apple"); container.add("Banana"); container.add("Orange"); // 使用 for-each 循環(huán)遍歷容器 for (String fruit : container) { System.out.println(fruit); } } }
輸出結(jié)果:
Apple Banana Orange
在上述例子中,我們創(chuàng)建了一個(gè)自定義容器類(lèi)MyContainer,實(shí)現(xiàn)了Iterable接口,并提供了一個(gè)內(nèi)部類(lèi) MyIterator實(shí)現(xiàn)了Iterator接口。這樣,我們就可以使用for-each循環(huán)來(lái)遍歷容器中的元素。