jdk1.6 1.7 1.8 LinkedList源码实现原理及区别

本文详细介绍了LinkedList在JDK1.6中的实现原理,包括构造函数、添加、删除、获取元素等操作。尽管JDK1.7和1.8的实现与1.6相同,但讨论了不同版本间的差异,特别是针对空链表的操作行为。
摘要由CSDN通过智能技术生成

LinkedList(jdk1.6)

private transient Entry<E> header = new Entry<E>(null, null, null);

定义一个空的Entry对象作为头结点,Entry是其内部定义的一个内部静态类,结构如下:

private static class Entry<E> {
    E element;
    Entry<E> next;
    Entry<E> previous;

    Entry(E element, Entry<E> next, Entry<E> previous) {
        this.element = element;
        this.next = next;
        this.previous = previous;
    }
}

构造函数

public LinkedList() {
        header.next = header.previous = header;
    }

即把首结点尾结点都指向头结点

 public E getFirst() {
    if (size==0)
        throw new NoSuchElementException();

    return header.next.element;
    }

获取元素首节点,如果链表中没有元素,会报NoSuchElementException错误。

 public E getLast()  {
    if (size==0)
        throw new NoSuchElementException();

    return header.previous.element;
}

获取元素尾结点,同样的,如果链表中没有元素,会报NoSuchElementException错误。

public E removeFirst() {
    return remove(header.next);
}

删除首结点,其内部是通过下面函数实现的

private E remove(Entry<E> e) {
    if (e == header)
        throw new NoSuchElementException();

        E result = e.element;
        e.previous
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值