我正在尝试使用Java中的Iterable实现Iterator,这是我到目前为止所拥有的:
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
}
}
我需要帮助编写remove和iterator方法,任何帮助都非常有用。
谢谢。
答案 0 :(得分:4)
拥有Iterator实现Iterable对我没有意义
Ithing Ithingrable有一个iterator()方法,它返回一个Iterator。
此外,迭代器通常不保存数据,但引用具有数据的其他实例。
通常
class Foo implements Iterable
{
public Iterator iterator() {
return new FooIterator();
}
}
class FooIterator implements Iterator {
// with methods as you've defined them
}
答案 1 :(得分:4)
您正在将Iterator接口的实现与Iterable类混合。试试这个:
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
}
使用ArrayList而不是通用数组实现Iterable类可能会更好。
答案 2 :(得分:2)
使用ArrayList
代替数组,所以你可以这样做:
public Iterator<A> iterator() {
return elements.iterator();
}
如果你真的想要一个数组,你总是可以这样做:
public Iterator<A> iterator() {
return Arrays.asList(elements).iterator();
}