Java_LinkedList工作原理
来源:互联网 发布:win10查看图片软件 编辑:程序博客网 时间:2024/06/16 20:18
Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).
LinkedList实现了list接口,其底层实际上一个双向链表,其基本操作就是对双向链表的操作。当然,LinkedList是允许添加null的。
简单例子如下:
public class TestLinkList { public static void main(String[] args) { List<String> list=new LinkedList<String>(); list.add("A"); list.add("B"); list.add(null); list.add("C"); }}
可以查看,链表持有一个first与last节点,分别指向第一个和最后一个节点。对于每个具体的节点,其有next与prev属性,分别指向其下一个节点和上一个节点。
其数据结构图如下:
开始的一个第一个节点为空节点,不保存数据。
LinkedList部分源码:
/** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */ //指向第一个节点 transient Node<E> first; /** * Pointer to last node. * Invariant: (first == null && last == null) || * (last.next == null && last.item != null) */ //指向最后一个节点 transient Node<E> last; //节点 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; } } //链表的最后添加节点 public boolean add(E e) { linkLast(e); return true; } //获取指定位置的节点 public E get(int index) { //下标越界检查 checkElementIndex(index); //获取指定位置的数据 return node(index).item; } Node<E> node(int index) { //如果要获取的下标在size/2之前,则从前往后遍历 if (index < (size >> 1)) { Node<E> x = first; for (int i = 0; i < index; i++) x = x.next; return x; } else { //否则从后往前遍历 Node<E> x = last; for (int i = size - 1; i > index; i--) x = x.prev; return x; } }
总结:LinkedList 是一个实现了list接口,底层是一个双向链表,基本的操作就是对链表的操作, 因为是基于链表来实现的,所以其容量是无限的, 在get操作的时候,会判断index与链表一般的大小,若index小于size/2,则从表头来开始查找,否则从链表的尾部开始查找
0 0
- Java_LinkedList工作原理
- java_linkedList 猴子选大王
- 工作原理
- struts2工作原理 工作流程
- 防火墙的工作原理
- EJB 工作原理
- Servlet容器工作原理
- 网上邻居的工作原理
- 路由器的工作原理
- DHCP的工作原理
- JDBC的工作原理
- dll工作原理
- 电子邮件工作原理
- Internet的工作原理
- EJB的工作原理
- Jsp工作原理
- DLL工作原理
- Lucene的工作原理
- cocos2d-x基础概念介绍——导演、场景、层、精灵
- 滑动控件起飞的另一种方式
- 性能最好的序列化反序列化,Protobuf的用法(maven项目)
- 撸代码记录篇1.3-奔跑的皮皮熊
- 正则表达式中参数g、i、m的作用
- Java_LinkedList工作原理
- 表单验证
- laravel框架monlog配置
- Redis入门 – Jedis存储Java对象
- SAP ABAP Debug 小技巧
- python自动化测试unittest+selenium+HTMLTestRunner(一)
- elasticsearch安装
- Climbing Stairs
- fastjson、gson、jackson序列化和反序列化性能对比