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 }