Подтвердить что ты не робот

Как я могу использовать java для каждого цикла с пользовательскими классами?

Я думаю, что большинство кодировщиков использовали следующий код:


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

Как я могу использовать преимущества каждого цикла для своих классов? Есть ли интерфейс, который я должен реализовать?

4b9b3361

Ответ 1

Вы можете реализовать Iterable.

Здесь пример. Это не самое лучшее, поскольку объект является его собственным итератором. Однако это должно дать вам представление о том, что происходит.

Ответ 3

Краткая версия цикла 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
}

и Iterator для моей коллекции может выглядеть так:

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");

        }
   }
}