LinkedList源码实现 get
1.首先看get源码
public E get(int index) {
//调用checkElementIndex()方法
checkElementIndex(index);
return node(index).item;
}
2.调用checkElementIndex方法判断是否索引越界,否则抛出异常
private void checkElementIndex(int index) {
if (!isElementIndex(index))
throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
}
3.调用node方法取值
Node<E> node(int index) {
// assert isElementIndex(index);
//判断取值的下标是否小于数据总长度的一半,true则从前面开始用for循环比对往后面查询
//判断方式为从0或则从最后一位开始循环,通过链表的第一位往后或者最后一位往前取值,循环到index位返回结果
if (index < (size >> 1)) {
Node<E> x = first;
for (int i = 0; i < index; i++)
x = x.next;
return x;
} else {
//false则用for循环从后面往前查询
Node<E> x = last;
for (int i = size - 1; i > index; i--)
x = x.prev;
return x;
}
}