[英]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.