首页常见问题正文

我们能自己写一个容器类,然后使用for-each循环吗?

更新时间:2023-08-01 来源:黑马程序员 浏览量:

IT培训班

  在Java中,我们可以自己编写一个容器类,并且可以使用for-each循环(也称为增强型for循环或foreach循环)遍历容器中的元素。要实现这一点,我们的容器类必须满足以下条件:

  1.实现Iterable接口

  我们的容器类必须实现java.lang.Iterable接口。该接口包含一个名为iterator() 的方法,该方法返回一个实现了java.util.Iterator接口的对象,用于遍历容器中的元素。

  2.实现Iterator接口

  我们的容器类还必须实现java.util.Iterator接口。Iterator接口定义了几个方法,如hasNext()(判断是否有下一个元素)、next()(返回下一个元素)和remove()(从容器中移除当前元素,可选操作)。

  接下来笔者用一个具体的代码示例,演示下如何创建一个自定义容器类并使用for-each循环遍历它:

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 循环遍历容器
        for (String fruit : container) {
            System.out.println(fruit);
        }
    }
}

  输出结果:

Apple
Banana
Orange

  在上述例子中,我们创建了一个自定义容器类MyContainer,实现了Iterable接口,并提供了一个内部类 MyIterator实现了Iterator接口。这样,我们就可以使用for-each循环来遍历容器中的元素。

分享到:
在线咨询 我要报名
和我们在线交谈!