双端链表,可以正向和反向遍历链表,提升了遍历的效率。
可以实现队列和栈的数据结构。
1、在取链表中固定位置中的一个值时,因为链表结构需要进行遍历。会分析要取的位置在链表的前半部分还是后半部分??如果前半部分通过head进行往后遍历,如果为后半部分通过尾部向前进行遍历。这样提高了效率。
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;
}