LinkedList集合源码解析

来源:互联网 发布:淘宝店铺四钻能卖多少 编辑:程序博客网 时间:2024/05/06 16:35

LinkedList集合源码解析

public class LinkedList<E>    extends AbstractSequentialList<E>    implements List<E>, Deque<E>, Cloneable, java.io.Serializable{    ......    }

LinkedList是基于双向链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。

LinkedList同样是非线程安全的,只在单线程下适合使用。

LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。

/ 双向链表的节点所对应的数据结构。        // 包含3部分:上一节点,下一节点,当前节点值。   private static class Node<E> {        E item;        Node<E> next;        Node<E> prev;        Node(Node<E> prev, E element, Node<E> next) {            this.item = element;            this.next = next;            this.prev = prev;        }    }             /**     * 把e作为头节点     */    private void linkFirst(E e) {        final Node<E> f = first;        final Node<E> newNode = new Node<>(null, e, f);        first = newNode;        if (f == null)            last = newNode;        else            f.prev = newNode;        size++;        modCount++;    }    /**     * 把e做为尾节点     */    void linkLast(E e) {        final Node<E> l = last;        final Node<E> newNode = new Node<>(l, e, null);        last = newNode;        if (l == null)            first = newNode;        else            l.next = newNode;        size++;        modCount++;    }

可以看出在1.7中LinkList是双向链表,但不是循环链表(这是在1.6上的变化)

  • 不是循环链表,有以下好处
  1. first / last有更清晰的链头、链尾概念,代码看起来更容易明白。
  2. first / last方式能节省new一个headerEntry。(实例化headerEntry是为了让后面的方法更加统一,否则会多很多header的空校验)
  3. 在链头/尾进行插入/删除操作,first /last方式更加快捷。

在查找和删除某元素时,源码中都划分为该元素为null和不为null两种情况来处理,LinkedList中允许元素为null

LinkedList是基于链表实现的,因此不存在容量不足的问题,所以这里没有扩容的方法

LinkedList同样也实现了ListIterator,可以在迭代过程中进行修改

反向迭代器descendingIterator

LinkedList list=new LinkedList();        list.add(1);        list.add(2);        list.add(3);        //System.out.println(list.getLast());        Iterator it=list.descendingIterator();        while (it.hasNext()){            System.out.println(it.next());        }                //输出:3,2,1
0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 航班晚点导致错过转机怎么办 想去沈阳站送站怎么办 高铁没有赶上车怎么办 火车晚点赶不上下一趟车怎么办 列车晚点影响下一趟车怎么办? 高铁晚点赶不上下班车怎么办 火车在半路坏了怎么办 做火车中途坏了怎么办 员工怀孕不上班保险怎么办 怀孕带孩子不能上班保险怎么办 怀孕了不想上班保险怎么办 高铁票没票了怎么办 购买动车票无座怎么办 个税工资多报怎么办 火车晚点耽误了转车怎么办 坐火车联系不上怎么办 号码被别人注册了12306怎么办 注册12306的号码换了怎么办 12306号码被注册了怎么办 12306身份证被注册了怎么办 12306被别人注册了怎么办 铁路1236注册名忘记了怎么办 12306手机被别人注册了怎么办 12306注册手机不用了怎么办 到站后火车票掉了怎么办 在手机上买了票怎么办 智行火车票抢不到票怎么办 高铁买票票丢了怎么办 异地恋房费太贵怎么办 高铁票车上丢了怎么办 取了高铁票丢了怎么办 高铁买了学生票没带学生证怎么办 买的学生票超过区间怎么办 买了超过区间的学生票怎么办 火车票大于学生票购买区间怎么办 买了学生票学生证丢了怎么办 取票学生证没带怎么办 学生卡的失磁怎么办 学生证没有充磁买不了学生票怎么办 买学生票不在优惠区间怎么办 火车票学生优惠次数用完怎么办