LinkedList源码问题

zxd297139205 2013-03-20 05:04:47
在里面有个private方法是获取指定节点的代码如下:

/**
* 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;
}

第二个if语句的内容不是很理解,求指导
...全文
167 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ceclinux 2013-03-31
  • 打赏
  • 举报
回复
size >> 1是移位运算,相当于java里面的/2 运用了折半查找 具体楼主google了
sffx123 2013-03-29
  • 打赏
  • 举报
回复
引用 4 楼 zxd297139205 的回复:
就是为了提高效率吗
你还想要什么?本身这个方法就是要查找,肯定越快越好了。
dracularking 2013-03-20
  • 打赏
  • 举报
回复
类似于折半查找吧
求知路漫漫 2013-03-20
  • 打赏
  • 举报
回复
引用 5 楼 preferme 的回复:
LinkedList , JDK中的实现,是一个双向循环链表。 第二个if语句,是判断,你要定位的元素,处在双向循环链表的前半部分还是后半部分。 如果你要定位前半部分,那么只需要从表头,向后查找就可以了; 如果你要定位后半部分,那么就要从表尾,向前查找。 主要是减少查找过程中的比较次数,提高定位效率。
++
冰思雨 2013-03-20
  • 打赏
  • 举报
回复
LinkedList , JDK中的实现,是一个双向循环链表。 第二个if语句,是判断,你要定位的元素,处在双向循环链表的前半部分还是后半部分。 如果你要定位前半部分,那么只需要从表头,向后查找就可以了; 如果你要定位后半部分,那么就要从表尾,向前查找。 主要是减少查找过程中的比较次数,提高定位效率。
zxd297139205 2013-03-20
  • 打赏
  • 举报
回复
就是为了提高效率吗
sffx123 2013-03-20
  • 打赏
  • 举报
回复
引用 2 楼 zxd297139205 的回复:
引用 1 楼 zhou9898 的回复:index < (size >> 1) size:右移1位(位移不懂百度、谷歌) 然后Index与size位移完之后的比较。 楼下不必回复了。 我知道if条件表面的意识,但不知道为什么要这样判断。
对遍历的一个优化,linkedlist是个“环状结构”,所以遍历的时候需要选择最优的方向——倒着找,还是正着找。
zxd297139205 2013-03-20
  • 打赏
  • 举报
回复
引用 1 楼 zhou9898 的回复:
index < (size >> 1) size:右移1位(位移不懂百度、谷歌) 然后Index与size位移完之后的比较。 楼下不必回复了。
我知道if条件表面的意识,但不知道为什么要这样判断。
达达KZT 2013-03-20
  • 打赏
  • 举报
回复
index < (size >> 1) size:右移1位(位移不懂百度、谷歌) 然后Index与size位移完之后的比较。 楼下不必回复了。

62,621

社区成员

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

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