LinkedList集合源码解析
来源:互联网 发布:淘宝店铺四钻能卖多少 编辑:程序博客网 时间:2024/05/06 16:35
LinkedList集合源码解析
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable{ ...... }
LinkedList是基于双向链表(从源码中可以很容易看出)实现的,除了可以当做链表来操作外,它还可以当做栈、队列和双端队列来使用。
LinkedList同样是非线程安全的,只在单线程下适合使用。
LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。
/ 双向链表的节点所对应的数据结构。 // 包含3部分:上一节点,下一节点,当前节点值。 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; } } /** * 把e作为头节点 */ private void linkFirst(E e) { final Node<E> f = first; final Node<E> newNode = new Node<>(null, e, f); first = newNode; if (f == null) last = newNode; else f.prev = newNode; size++; modCount++; } /** * 把e做为尾节点 */ 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++; }
可以看出在1.7中LinkList是双向链表,但不是循环链表(这是在1.6上的变化)
- 不是循环链表,有以下好处
- first / last有更清晰的链头、链尾概念,代码看起来更容易明白。
- first / last方式能节省new一个headerEntry。(实例化headerEntry是为了让后面的方法更加统一,否则会多很多header的空校验)
- 在链头/尾进行插入/删除操作,first /last方式更加快捷。
在查找和删除某元素时,源码中都划分为该元素为null和不为null两种情况来处理,LinkedList中允许元素为null
LinkedList是基于链表实现的,因此不存在容量不足的问题,所以这里没有扩容的方法
LinkedList同样也实现了ListIterator,可以在迭代过程中进行修改
反向迭代器descendingIterator
LinkedList list=new LinkedList(); list.add(1); list.add(2); list.add(3); //System.out.println(list.getLast()); Iterator it=list.descendingIterator(); while (it.hasNext()){ System.out.println(it.next()); } //输出:3,2,1
0 0
- LinkedList集合源码解析
- 源码解析-集合-LinkedList
- Java集合源码----LinkedList解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- 从源码解析LinkedList集合
- 从源码解析LinkedList集合
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- 从源码解析LinkedList集合
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合---LinkedList源码解析
- Java集合类库 LinkedList 源码解析
- 尝试解决JPA懒加载异常问题(wildfly)
- Spark中组件Mllib的学习29之支持向量机SVM-方法2
- MPLS/VPN 基本原理及在ZXR10中的配置
- 4Sum
- 飛飛(四十六)交通工具
- LinkedList集合源码解析
- eclipse使用maven搭建spring mvc
- native binder相关类
- JDBC初识
- 数组中只出现一次的数字
- leetcode---Roman to Integer
- HDU 4857 逃生 (反向拓扑排序+优先队列)
- Echarts 使用总结
- 48.leetcode题目17. Letter Combinations of a Phone Number