需要解释迭代器的具体示例

时间:2014-03-13 07:57:39

标签: java interface iterator

对Joe和他的网站javapapers.com给予应有的信用,

我需要解释在浏览java中的迭代器时遇到的以下代码

package com.javapapers;

import java.util.ArrayList;
import java.util.Iterator;

      public class AnimalIterator<String> implements Iterator<Object> {

    private ArrayList<?> animal;
      private int position;

     public AnimalIterator(Animal animalBase) {
    this.animal = animalBase.getAnimal();
  }

     @Override
     public boolean hasNext() {
    if (position < animal.size())
      return true;
      else
      return false;
     }

     @Override
       public Object next() {
      Object aniObj = animal.get(position);
      position++;
      return aniObj;
     }

      @Override
     public void remove() {
    animal.remove(position);
     }

    }
     package com.javapapers;

     import java.util.ArrayList;
     import java.util.Iterator;

     public class Animal implements Iterable<String> {

      private ArrayList<String> animal = new ArrayList<String>();

     public Animal(ArrayList animal){
    this.animal = animal;
      }

     public ArrayList getAnimal() {
      return animal;
     }

      @Override
       public Iterator<String> iterator() {
      return new AnimalIterator(this);
          }

     }
       package com.javapapers;

      import java.util.ArrayList;

         public class TestIterator {

       public static void main(String args[]) {
        ArrayList<String> animalList = new ArrayList();
        animalList.add("Horse");
         animalList.add("Lion");
         animalList.add("Tiger");
       Animal animal = new Animal(animalList);  
        for (String animalObj : animal) {       ??
         System.out.println(animalObj);         ??
        }
       }
      }

我的疑问是在??,这里我们定义for循环迭代定义的动物对象,但我不明白Iterator是如何在这里使用的。

http://javapapers.com/core-java/java-iterator/

1 个答案:

答案 0 :(得分:0)

表达式:

for (Type item : items) {
}

在Java中称为 foreach-loop 。它适用于实现Iterable<T>的每种类型。它可以翻译成:

for (Iterator<Type> iter = items.iterator(); iter.hasNext(); ) {
    Type item = iter.next();
}

因此,迭代器被隐式使用,在 foreach-loop 中对你的眼睛是不可见的。