Java LinkedList.get() 获取元素

Get(int)方法的实现在remove(int)中已经涉及过了。首先判断位置信息是否合法(大于等于0,小于当前LinkedList实例的Size),然后遍历到具体位置,获得节点的业务数据(element)并返回。

方法

get(int index):返回此列表中指定位置处的元素。
getFirst():返回此列表的第一个元素。
getLast():返回此列表的最后一个元素。
indexOf(Object o):返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
lastIndexOf(Object o):返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。

源码分析

// 获取双向链表中指定位置的节点    
private Entry < E > entry(int index) {
    if (index < 0 || index >= size) throw new IndexOutOfBoundsException("Index: " + index + ", Size: " + size);
    Entry < E > e = header;
    // 获取index处的节点。    
    // 若index < 双向链表长度的1/2,则从前先后查找;    
    // 否则,从后向前查找。    
    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;
}

注意细节:位运算与直接做除法的区别。先将index与长度size的一半比较,如果index<size/2,就只从位置0往后遍历到位置index处,而如果index>size/2,就只从位置size往前遍历到位置index处。这样可以减少一部分不必要的遍历








版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。