LinkedList 的双向链表存储数据 底层源码分析

 1 class MyLinkedList<E> {
 2 
 3     int size = 0;//集合元素的个数
 4 
 5     Node<E> first;//指向第一个元素
 6     Node<E> last;//指向最后一个元素
 7 
 8     //元素
 9     private static class Node<E> {
10         E item;//元素核心
11         Node<E> prev;//元素头部
12         Node<E> next;//元素尾部
13 
14         Node(Node<E> prev, E item,Node<E> next) {
15             this.item = item;
16             this.prev = prev;
17             this.next = next;
18         }
19     }
20 
21     //集合添加元素操作
22     public boolean add(E e) {
23         linkLast(e);
24         return true;
25     }
26 
27     //集合添加元素逻辑(双向链表)
28     private void linkLast(E e) {
29         //局部常量l指向此时的最后一个元素
30        final Node<E> l = last;
31        // 通过l实参,使加入的新元素newNode其头部指向集合的最后那个元素
32         Node newNode = new Node(l, e, null);
33         //将新元素newNode标记为最后一个元素
34         last = newNode;
35         if (l == null) {//如果为true,说明newNode是集合中添加的第一个元素
36             //将newNode标记为第一个元素
37             first = newNode;
38         } else { //否则,就把倒数第二个元素的尾部指向最后一个元素
39             l.next = newNode;
40         }
41         size++;
42     }
43 
44 }

 

posted @ 2021-02-19 00:31  dog_IT  阅读(45)  评论(0编辑  收藏  举报