Java - 自定义迭代器和链表中的remove()

时间:2013-10-31 18:17:47

标签: java iterator

我是一个绝对的Java初学者,并且一直致力于为自定义迭代器(用于链表)获取remove()。我一直在努力让这个工作起来。我的问题是没有删除迭代的项目。但是,当没有前一个元素时,该方法会(正确地)抛出IllegalState错误。

如果你们可以看一下它,并表明可能出现的问题,我将不胜感激,因为我不能自己解决这个问题,并尝试过各种各样的事情。 一个问题:我接下来在构造函数中设置的问题是什么?因为如果我不这样做,那么列表就不会被迭代了!

提前非常感谢你。

=============================================== =====================

public class CustListIterator<E> implements Iterator<E> {

private Node<E> head;
private Node<E> next;
private Node<E> prev;
private CustList<E> list;

public CustListIterator(CustList<E> list) {
        this.list = list;
    head = list.head;
    next = head;
}

public boolean hasNext() {
    return next != null;                 
}

public E next() {
    if (!hasNext())
        throw new NoSuchElementException ();
    prev = next;
    E element = next.element;
    next = next.next;
    return element;
}

public void remove() { 
    if(prev == null) {
        throw new IllegalStateException();
    }
    else {
        if(prev == head){
            head = prev.next;
            list.head = head;
        }
        next = prev.next;
        prev = null;
        list.listSize--;
    }
}

=============================================== ==============================

的迭代
CustList<String> items = new CustList<String>();
items.add("aaaaaa");
items.add("bbbbb");
items.add("ccc");
items.add("dddddddd");
items.add("eeeeee");

System.out.println("List iterated:");
Iterator<String>  it = items.iterator();

while (it.hasNext()) {
    System.out.println(it.next());
    it.remove();
}

System.out.println("Size: " + items.size());

=============================================== ==============================

然而仍然给出

List iterated:
aaaaaa
bbbbb
ccc
dddddddd
eeeeee
Size: 0

0 个答案:

没有答案
相关问题