首頁(yè)常見問題正文

我們能自己寫一個(gè)容器類,然后使用for-each循環(huán)嗎?

更新時(shí)間:2023-08-01 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班

  在Java中,我們可以自己編寫一個(gè)容器類,并且可以使用for-each循環(huán)(也稱為增強(qiáng)型for循環(huán)或foreach循環(huán))遍歷容器中的元素。要實(shí)現(xiàn)這一點(diǎn),我們的容器類必須滿足以下條件:

  1.實(shí)現(xiàn)Iterable接口

  我們的容器類必須實(shí)現(xiàn)java.lang.Iterable接口。該接口包含一個(gè)名為iterator() 的方法,該方法返回一個(gè)實(shí)現(xiàn)了java.util.Iterator接口的對(duì)象,用于遍歷容器中的元素。

  2.實(shí)現(xiàn)Iterator接口

  我們的容器類還必須實(shí)現(xiàn)java.util.Iterator接口。Iterator接口定義了幾個(gè)方法,如hasNext()(判斷是否有下一個(gè)元素)、next()(返回下一個(gè)元素)和remove()(從容器中移除當(dāng)前元素,可選操作)。

  接下來筆者用一個(gè)具體的代碼示例,演示下如何創(chuàng)建一個(gè)自定義容器類并使用for-each循環(huán)遍歷它:

import java.util.Iterator;

// 自定義容器類
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();
    }

    // 自定義迭代器類
    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è)自定義容器類MyContainer,實(shí)現(xiàn)了Iterable接口,并提供了一個(gè)內(nèi)部類 MyIterator實(shí)現(xiàn)了Iterator接口。這樣,我們就可以使用for-each循環(huán)來遍歷容器中的元素。

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!