繁体   English   中英

在Java中实现Iterable remove()和iterator()

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM