目录
一、概念
二、源码分析
1、属性
2、节点结构
3、常用方法
①get(int index)
②add(E e)
③set(int index, E element)
④remove(int index)
三、总结
一、概念
LinkedList 是一种基于链表的集合,用双向链表实现的,提供了高效的插入和删除操作。
二、源码分析
1、属性
first表示第一个节点
last表示最后一个节点
2、节点结构
每一个节点记录了当前节点、上一个 节点、下一个节点。
3、常用方法
①get(int index)
//先判断在双向链表的前半段,还是后半段,然后找对应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的底层是数组,可以直接通过index得到结果,所以查询效率上ArrayList更快
②add(E e)
LinkedList只需要在链表最后加一个节点,而ArrayList由于底层是数组,在空间不足时要扩容,所以添加元素LinkedList效率高
③set(int index, E element)
查询index对应的节点,将这个节点的item改为传入的element
④remove(int index)
查询index对应的节点,将前一个节点与后一个节点连接
三、总结
LinkedList 基于双向链表实现的,节点地址是任意的,所以不用开辟内存空间连续的地址,LinkedList 在插入、删除操作时效率优于ArrayList,查询则ArrayList更快。