更新時(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)必須滿(mǎn)足以下條件:
我們的容器類(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)遍歷容器中的元素。