[英]Implementing Iterable in Java remove() and iterator()
我正在尝试使用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方法的帮助,任何帮助都非常有用。
谢谢。
有一个Iterator实现Iterable对我来说没有意义
Iterable的东西具有iterator()方法,该方法返回Iterator。
同样,迭代器通常不保存数据,而是引用具有数据的其他实例。
所以通常
class Foo implements Iterable
{
public Iterator iterator() {
return new FooIterator();
}
}
class FooIterator implements Iterator {
// with methods as you've defined them
}
您正在将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类可能会更好。
使用ArrayList
而不是数组,因此您可以执行以下操作:
public Iterator<A> iterator() {
return elements.iterator();
}
如果您确实想要一个数组,则可以随时执行以下操作:
public Iterator<A> iterator() {
return Arrays.asList(elements).iterator();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.