如何从某个对象的数组生成Iterator

时间:2013-02-23 03:55:33

标签: java arrays iterator

private SomeObject[] all_objs;     

public Iterator<SomeObject> iterator() {
   //
}

SomeObject数组中获取迭代器的最佳方法是什么?

修改 所以没有使用像ArrayLists或HashSets这样的包装器就无法生成迭代器?

3 个答案:

答案 0 :(得分:5)

您可以编写自己的实现Iterator<SomeObject>的类。只需实现界面的方法。如果您不希望迭代器的用户从数组中删除项(因为它不是ArrayList),则在调用此方法时抛出UnsupportedOperationException。

当然如果你使用ArrayList<SomeObject>,那么iterator()方法只需要从ArrayList返回迭代器,这会让你的生活更轻松。

答案 1 :(得分:3)

使用List迭代器:

import java.util.List;
import java.util.Arrays;

public <T> Iterator<T> iterator() {
    List<T> list = (List<T>) Arrays.asList(all_objs);

    return list.iterator();
}

答案 2 :(得分:1)

您还可以查看java.util.ArrayList的代码。这是你应该如何实现它。

 T=SomeObject //Your Class

 public YourIterable<T> implements Iterable<T>{
     //**Iterable**  Implementing this interface allows an object 
     //to be the target of the "foreach" statement.
     public Iterator<T> iterator() {

          return new Itr();
      }  

   private class Itr implement Iterator<T> {
      //Complex Implementation - You have to maintain a Cursor to keep track of 
      // which record was accessed
            boolean hasNext() {
                 //Returns true if the iteration has more elements.
            }

            T next() { 
             //Returns the next element in the iteration.
            }  

            void remove() {//Remove 
          }

    }

 }