【问题标题】:How to generate an Iterator from an array of certain object如何从某个对象的数组中生成迭代器
【发布时间】:2013-02-23 03:55:33
【问题描述】:
private SomeObject[] all_objs;     

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

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

编辑 因此,如果不使用 ArrayLists 或 HashSets 之类的包装器,就无法生成迭代器?

【问题讨论】:

标签: java arrays iterator


【解决方案1】:

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

当然,如果您使用 ArrayList&lt;SomeObject&gt;,那么 iterator() 方法只需从 ArrayList 返回迭代器,让您的生活更轻松。

【讨论】:

    【解决方案2】:

    使用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();
    }
    

    【讨论】:

      【解决方案3】:

      你也可以看看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 
                }
      
          }
      
       }
      

      【讨论】:

        猜你喜欢
        • 2017-12-18
        • 2018-11-29
        • 2016-04-16
        • 1970-01-01
        • 2023-03-20
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 2019-08-11
        相关资源
        最近更新 更多