私はカスタムリンクリストを作成しました。また、私はiteratorを作りました。しかし、私が理解しているように、プログラムはメソッドsize()でループしていません。どうしたの?それは私の不正確なループかiterator()
についてですか?すべてのノードにフィールドがあります:nextIndex
、prevIndex
、value
。リンクリストのカスタムイテレータ
public class CustomLinkedList<E> implements List<E>{
private ListNode<E> header = new ListNode<>();
public CustomLinkedList() {
this.header = new ListNode();
}
@Override
public int size() {
int size = 0;
for(E it : this) {
size++;
}
return size;
}
@Override
public boolean isEmpty() {
if(this.header == null){
return true;
} else {return false;}
}
@Override
public boolean contains(Object o) {
if(((Integer) header.getValue() == 42) && ((Integer) header.getNextIndex().getValue() == 38)) return true;
return false;
}
@Override
public Iterator<E> iterator() {
return new Iterator<E>() {
private ListNode it = header;
@Override
public boolean hasNext() {
return (it.getNextIndex() != header) && (it.getNextIndex() != null);
}
@Override
public E next() {
it = it.getNextIndex();
return (E) it.getValue();
}
@Override
public void remove()
{
throw new UnsupportedOperationException("Iterator is read-only");
}
};
}
@Override
public boolean add(E e) {
ListNode<E> temp = new ListNode<>();
temp.setValue(e);
if (this.size() < 1) {
header.setValue(e);
header.setPrevIndex(header);
header.setNextIndex(header);
} else {
temp.setNextIndex(header);
ListNode tempLast = header.getPrevIndex();
tempLast.setNextIndex(temp);
header.setPrevIndex(temp);
temp.setPrevIndex(tempLast);
}
return true;
}
@Override
public boolean remove(Object o) {
return true;
}
@Override
public boolean containsAll(Collection<?> c) {
throw new NotImplementedException();
}
@Override
public void clear() {
throw new NotImplementedException();
}
@Override
public E get(int index) {
throw new NotImplementedException();
}
@Override
public int indexOf(Object o) {
throw new NotImplementedException();
}
@Override
public boolean addAll(Collection<? extends E> c) {
throw new NotImplementedException();
}
}
どのように最初の反復でheader.valueを取得するために改善するのですか?今それはしません。最初の反復でheader.getNextIndex()。getValue()を取得するためです。 – Russiancold
ええ、あなたは正しいです。私はhasNext()とその初期化でコードを編集しましたが、それをテストしませんでした。今はOKだと思います。 –
ありがとうございました。 – Russiancold