关于LinkedList的分析,会从且仅从其添加(add)方法入手。
因为上一篇已经分析过ArrayList,相似的地方就不再叙述,关注点在LinkedList的特点。
属性:
/** *链表头 */ transient Node<E> first; /** * 链表尾 */ transient Node<E> last;
从以上两个属性可以得出LinkedList是基于双向链表实现的。
节点代码(无需过多解释):
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; } }
LinkedList的add方法:
LinkedList中有多个add方法,大同小异,遂选取其一进行分析。
/** * 插入指定元素到list尾部 */ public boolean add(E e) { linkLast(e); return true; } /** * Links e as last element. */ 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++;//此系列博客中有详细解释 }
时间: 2024-10-08 10:08:56