Java深入源码之LinkedList

  一.LinkedList的整体架构:

      1.LinkedList是一个环形的双向循环链表,一个节点有向前与向后的指针且head节点不包含任何的数据。

  .LinkedList的构造函数有两种:

      1.无参的构造函数:直接建立一个知识包含head头结点的空链表

      2.带有Collection[]参数的链表:先调用无参的构造函数去创建链表,然后将数组中的数据添加到链表中

  .LinkedList的查找和删除:

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

      2、注意源码中的Entry<E> entry(int index)方法。该方法返回双向链表中指定位置处的节点,而链表中是没有下标索引的,要指定位置出的元素,就要遍历该链表,从源码的实现中,我们看到这里有一个加速动作源码中先将index与长度size的一半比较,如果index<size/2,就只从位置0往后遍历到位置index处,而如果index>size/2,就只从位置size往前遍历到位置index处。这样可以减少一部分不必要的遍历,从而提高一定的效率(实际上效率还是很低)

  .LinkedList的扩容:

      1.因为LinkedList是基于链表而不是数组实现,有新加入的节点就新new出来一块内存,原理上不存在内存不足的情况

所以没有扩容的情况

你可能感兴趣的:(java,源码)