java迭代器遍历两张关联表_查了一天的资料还是想不通双向链表迭代器为什么从后往前遍历...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

private class ListItr implements ListIterator {

private Entry lastReturned = header;

private Entry next;

//调用next()方法的节点

private int nextIndex;

private int expectedModCount = modCount;

ListItr(int index) {

if (index < 0 || index > size)

throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);

if (index < (size >> 1)) {

next = header.next;

for (nextIndex=0; nextIndex

next = next.next;

} else {

next = header;

for (nextIndex=size; nextIndex>index; nextIndex--)

next = next.previous;

}

}

public boolean hasNext() {

return nextIndex != size;

}

public Object next() {

checkForComodification();

if (nextIndex == size)

throw new NoSuchElementException();

lastReturned = next;

next = next.next;

nextIndex++;

return lastReturned.element;

}

public boolean hasPrevious() {

return nextIndex != 0;

}

public Object previous() {

if (nextIndex == 0)

throw new NoSuchElementException();

lastReturned = next = next.previous;

nextIndex--;

checkForComodification();

return lastReturned.element;

}

public int nextIndex() {

return nextIndex;

}

public int previousIndex() {

return nextIndex-1;

}

public void remove() {

checkForComodification();

try {

LinkedList.this.remove(lastReturned);

} catch (NoSuchElementException e) {

throw new IllegalStateException();

}

if (next==lastReturned)  //这里表示删除的是调用previous()返回的元素。

next = lastReturned.next; //next被删除,所以next要后移,索引不变。

else

nextIndex--;      //删除的是next.previous,所以索引要减1。

lastReturned = header;  //这里很重要:1.释放资源。2.不允许连续调用remove。

expectedModCount++;

}

public void set(Object o) {

if (lastReturned == header)

throw new IllegalStateException();

checkForComodification();

lastReturned.element = o;

}

public void add(Object o) {

checkForComodification();

lastReturned = header;

addBefore(o, next);

nextIndex++;

expectedModCount++;

}

final void checkForComodification() {

if (modCount != expectedModCount)

throw new ConcurrentModificationException();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值