私は Java の完全な初心者であり、(リンクされたリストの) カスタム イテレータの remove() を機能させることに取り組んできました。私はこれを機能させるために何時間も努力してきました。私の問題は、反復されたアイテムが削除されないことです。ただし、前の要素がない場合、メソッドは (正しく) IllegalState エラーをスローします。
私はそれを回避することができず、あらゆる種類のさまざまなことを試したので、皆さんがそれを見て、何が間違っているのかを指摘していただければ幸いです. 1 つの質問: コンストラクターで次にヘッドとして設定する問題はありますか? そうしないと、リストがまったく反復されないからです。
よろしくお願いします。
================================================== ==================
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