LinkedList源码复习(JDK1.6)

1.概述

List的链表实现,是一种双向循环链表

(1)存储的元素允许为NULL
(2)存储的元素允许重复
(3)非线程安全
(4)有序

2.底层实现

LinkedList的的一个内部类
private static class Entry{
E element;
Entry next;
Entry previous;
}

3.构造方法

提供了两个构造方法
public LinkedList():将header结点的前一节点和后一节点都设置为自身

public LinkedList(Collection<? extends E> c):首先调用无参的构造方法构造一个空链表,之后通过addAll将c中的元素全部添加到链表中

4.元素的增删改查

(1)增加
public boolean add(E e):调用了addBefore(E e,Entry entry)方法
public void add(int index,E e):调用了addBefore(E e,Entry entry)方法
public void addFirst(E e):调用了addBefore(E e,Entry entry)方法
public void addLast(E e):调用了addBefore(E e,Entry entry)方法

(2)删除
支持按照元素删除和下标删除
public E remove(int index){
return remove(entry(index));
}
通过下标找到该元素,修改该元素前后结点的指针,并将待删除的Entry的previous、element、next均设置为NULL,让虚拟机可以回收这个Entry

(3)修改
public E set(int index,E element):先获取指定索引的节点,之后保留原来的元素,然后使用element进行替换,并返回原来的元素

(4)查找
public E get(int index):当index小于数组大小的一半时(size>>1),从前开始查找,当index大于数组大小的一半时,从后开始查找

public E getLast():获取header节点的前一个节点的元素,即链表的最后一个节点

public E getFirst():返回链表的第一个节点的元素,即header.next.val

(5)插入
public boolean offer(E e):在链表尾部插入元素
public boolean offerFirst(E e):在链表头部插入元素
public boolean offerLast(E e):在链表尾部插入元素

5.优点

若插入、删除的元素是在数据结构的前半段时,效率较ArrayList高

6.缺点

(1)每次顺序插入时,都会new一个Entry出来,若Entry比较大,则时间会长一些

(2)LinkedList不仅维护了待插入的元素,还需要维护前驱和后继

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值