问题:LinkedList底层基于链表结构,是没有索引(角标)的,那它的方法里面(get)怎么又通过索引来操作元素的呢?
源码分析:
public E get(int index) {
checkElementIndex(index);
return node(index).item;
}
Node<E> node(int index) {
// assert isElementIndex(index);
if (index < (size >> 1)) { //size >>1 等价于 size = size/2
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}
从中我们可以发现,虽然参数是int型,但是其作用也只是提高查询的效率,最终获取元素,还是从头部或者从尾部,一个一个遍历取得的。
本文解析了LinkedList如何通过索引高效地获取元素。尽管LinkedList基于链表结构,没有真正的索引,但通过特定算法,它能从头或尾部快速定位到指定元素。
12万+

被折叠的 条评论
为什么被折叠?



