public E get(int index){checkElementIndex(index);returnnode(index).item;}
Node<E>node(int index){// assert isElementIndex(index);if(index <(size >>1)){
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;}}
增删快 只需要修改插入位置或删除位置左右数据的引用目标即可。
ArrayList
查询快 可以看出ArrayList底层是用的数组存储。 而数组的查询实际上是对引用地址的访问,不需要遍历。 列如 new int arr[5]; arr数组的地址假设为0x1000 arr[0] ~ arr[5] 地址可看作为 0x1000 + i * 4 首地址 + 下标 + 引用数据类型的字节大小。
transient Object[] elementData;public E get(int index){rangeCheck(index);returnelementData(index);}
E elementData(int index){return(E) elementData[index];}