LinkedList中的问题,求解释

黑夜中的一点慰藉 2013-01-21 08:06:31
我在学习LinkedList的时候,看了一下源码,有几处看的不是很懂,希望大神解释一二:
1、这代码中根据下标获取节点的这个是怎么判断的?什么逻辑?
/**
* Returns the indexed entry.
*/
private Entry<E> entry(int index) {
if (index < 0 || index >= size)
throw new IndexOutOfBoundsException("Index: "+index+
", Size: "+size);
Entry<E> e = header;
if (index < (size >> 1)) {
for (int i = 0; i <= index; i++)
e = e.next;
} else {
for (int i = size; i > index; i--)
e = e.previous;
}
return e;
}

2、modCount这个变量是做什么的?怎么没找到在哪定义的?
...全文
214 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
小江啊 2013-01-22
  • 打赏
  • 举报
回复
引用 4 楼 wangwuyilove 的回复:
引用 3 楼 wujiyongheng 的回复: 1 >>1 等于/2 也就是如果是小于size的1/2 就从前面开始遍历 如果是大于1/2就从后面开始遍历 2 protected transient int modCount = 0; 在AbstractList 692行 (PS:我没阅读过源码,确实我有混分的嫌疑) 为了拿分大致的搜索看了一下(拿分不容易) mo……
自然是为了效率
  • 打赏
  • 举报
回复
引用 3 楼 wujiyongheng 的回复:
1 >>1 等于/2 也就是如果是小于size的1/2 就从前面开始遍历 如果是大于1/2就从后面开始遍历 2 protected transient int modCount = 0; 在AbstractList 692行 (PS:我没阅读过源码,确实我有混分的嫌疑) 为了拿分大致的搜索看了一下(拿分不容易) modCount,你发现这个变量在所有有增删操作的地方都……
我是搞不懂为什么小于size的二分之一就从前面遍历?是不是有折半的意思?为了效率
小江啊 2013-01-21
  • 打赏
  • 举报
回复
1 >>1 等于/2 也就是如果是小于size的1/2 就从前面开始遍历 如果是大于1/2就从后面开始遍历

2 protected transient int modCount = 0; 在AbstractList 692行
(PS:我没阅读过源码,确实我有混分的嫌疑)



为了拿分大致的搜索看了一下(拿分不容易)
modCount,你发现这个变量在所有有增删操作的地方都是++ 然后赋值给了内部的迭代器,应该是为了防止在使用迭代期的时候linkedlist 又进行了增删的操作 checkForComodification()这个函数就是检测用的。

仓促之中,如有不对,还请指正。
  • 打赏
  • 举报
回复
size >> 1看懂这个你就明白了
dracularking 2013-01-21
  • 打赏
  • 举报
回复
双向链表,从头开始依序遍历查找元素。 目标离header哪边近就从哪个方向开始遍历。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧