首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

LinkedList源码有关问题

2013-04-20 
LinkedList源码问题在里面有个private方法是获取指定节点的代码如下: /*** Returns the indexed entry.*/p

LinkedList源码问题
在里面有个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语句的内容不是很理解,求指导
[解决办法]
LinkedList , JDK中的实现,是一个双向循环链表。
第二个if语句,是判断,你要定位的元素,处在双向循环链表的前半部分还是后半部分。
如果你要定位前半部分,那么只需要从表头,向后查找就可以了;
如果你要定位后半部分,那么就要从表尾,向前查找。
主要是减少查找过程中的比较次数,提高定位效率。
[解决办法]
size >> 1是移位运算,相当于java里面的/2
运用了折半查找
具体楼主google了

热点排行