2011-12-03 122 views
0

我试图实现与可迭代的迭代器在Java中,这里是我到目前为止有:实现可迭代在Java中remove()方法和迭代器()

public class keysIterator<A> implements Iteratble<A<{ 
    A[] elements; 
    int nextElement; 

keysIterator(A[] elements, int nextElement) { 
    this.elements = elements; 
    this.nextElement = 0; 
} 

public boolean hasNext() { 
    return this.nextElement < elements.length; 
} 

public A next() { 
    A result = elements[nextElement]; 
    nextElement = nextElement + 1; 
    return result; 
} 

public void remove() { 
    // TODO Auto-generated method stub 
} 

public Iterator<A> iterator() { 
    // TODO Auto-generated method stub 
} 

}

我需要帮助的写作删除和迭代器方法,任何援助极大地appericated。

谢谢。

+0

'实现Iteratble

回答

4

您实现Iterator接口的混合与您可迭代的类。试试这个:

public class KeysIterable<A> implements Iterable<A> { 
    A[] elements; 
    int nElements; 

    private class KeysIterator<A> implements Iterator<A> { 
     int nextElement = 0; 

     public boolean hasNext() { 
      return nextElement < nElements; 
     } 

     public A next() { 
      A result = elements[nextElement]; 
      nextElement = nextElement + 1; 
      return result; 
     } 

     public void remove() { 
      if (nextElement < nElements - 1) { 
       System.arraycopy(elements, nextElement + 1, 
        elements, nextElement, nElements - nextElement - 1); 
      } 
      nElements--; 
     } 
    } 

    public Iterator<A> iterator() { 
     return new KeysIterator<A>(); 
    } 

    public KeysIterable() { 

    } 

    // other methods 
} 

它可能会更好地实现您的Iterable类使用ArrayList而不是通用数组。

+0

非常感谢您的帮助。 – Brian

2

使用ArrayList而不是数组,所以你可以这样做:

public Iterator<A> iterator() { 
    return elements.iterator(); 
} 

如果你真的想要一个数组,你总是可以做:

public Iterator<A> iterator() { 
    return Arrays.asList(elements).iterator(); 
}