@author ixenos

 

 

 

LinkedList


  LinkedList是List接口的双向链表实现,JDK1.7以前是双向循环链表,以后是双向非循环链表;

  由于是链表结构,所以长度没有限制;而且添加/删除元素的时候,只需要改变指针的指向(把链表断开,插入/删除元素,再把链表连起来)即可,非常方便,而ArrayList却需要重整数组 (add/remove中间元素)。所以LinkedList适合用于添加/删除操作频繁的情况

 

 

JDK1.7以前 双向循环链表


   在JDK 1.7之前(此处使用JDK1.6来举例),LinkedList是通过headerEntry实现的一个循环链表的:

  1.先初始化一个空的Entry,用来做header,然后首尾相连,形成一个循环链表:

 

             Java 集合 JDK1.7的LinkedList

 

1 privatetransient Entry<E>header =new Entry<E>(null,null,null);

2 public LinkedList() {header.next =header.previous =header; } //构造方法先生成一个头结点

 

        2.每次添加/删除元素都是默认在链尾操作:

 

    Java 集合 JDK1.7的LinkedList

      

  对应此处,就是在header前面操作,因为遍历是next方向的,所以在header前面操作,就相当于在链表尾操作。

 

  如下面的插入操作addBefore以及图示,如果插入obj_3,只需要修改header.previous和obj_2.next指向obj_3即可:

 1 private Entry<E> addBefore(Eo) {      //取自JDK1.6-LinkedList,有删改
 2 
 3     Entry<E>newEntry = new Entry<E>(o,header,header.previous);
 4 
 5     newEntry.previous.next = newEntry;
 6 
 7     newEntry.next.previous = newEntry;
 8 
 9     size++;
10 
11     modCount++;
12 
13     return newEntry;
14 
15 }
16 
17  
View Code

相关文章:

  • 2021-09-12
  • 2021-04-17
  • 2021-07-13
  • 2021-05-01
  • 2021-10-28
  • 2021-11-10
  • 2021-06-16
猜你喜欢
  • 2021-08-23
  • 2021-08-31
  • 2021-12-05
  • 2022-01-06
  • 2021-06-30
  • 2021-08-17
相关资源
相似解决方案