如何将java用于自定义类的每个循环?

2022-08-31 17:37:34

我认为大多数编码人员都使用过如下代码:


ArrayList<String> myStringList = getStringList();
for(String str : myStringList)
{
   doSomethingWith(str);
}

如何利用 for 每个循环与我自己的类?是否有我应该实现的接口?


答案 1

你可以实现 Iterable

下面是一个示例。它不是最好的,因为对象是它自己的迭代器。但是,它应该让您了解发生了什么。


答案 2

for 循环的简短版本(代表我的自定义类型):T

for (T var : coll) {
    //body of the loop
}

被翻译成:

for (Iterator<T> iter = coll.iterator(); iter.hasNext(); ) {
    T var = iter.next();
    //body of the loop
}

我的收藏的迭代器可能如下所示:

class MyCollection<T> implements Iterable<T> {

    public int size() { /*... */ }

    public T get(int i) { /*... */ }

    public Iterator<T> iterator() {
        return new MyIterator();
    }

    class MyIterator implements Iterator<T> {

        private int index = 0;

        public boolean hasNext() {
            return index < size();
        }

        public type next() {
            return get(index++);
        }

        public void remove() {
            throw new UnsupportedOperationException("not supported yet");

        }
   }
}