LinkList集合详解

1、LinkedList简介

  • LinkedList类是一个继承于AbstractSequentialList的双向循环链表,它是非同步的,也是非线程安全的。
  • LinkedList实现了List接口,能对它进行队列操作。
  • LinkedList实现了Deque接口,能当作双端队列操作
  • LinkedList实现了CloneClass接口,能进行克隆操作。
  • LinkedList实现了SerialiableClass接口,能进行序列化操作。

2、List数据结构

  • LinkedList包含两种构造函数,一种是无参构造,另一种是有参构造,他的Node对象是一个静态内部类,包含了pre、next、element
   //指向第一个节点的指针transient Node<E> first;//指向指针的最后一个节点transient Node<E> last;//数据的个数transient int size = 0;//构造函数public LinkedList() {}public LinkedList(Collection<? extends E> c) {this();addAll(c);}
//节点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;}}

3、添加元素

  • 添加元素last指针向后移动,size+1,操作次数+1
    public boolean add(E e) {linkLast(e);return true;}
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;elsel.next = newNode;size++;modCount++;}

4、删除元素

  • 删除元素有多种方法,根据Object删除和根据index删除。
    //根据object删除,遍历找到删除node
public boolean remove(Object o) {if (o == null) {for (Node<E> x = first; x != null; x = x.next) {if (x.item == null) {unlink(x);return true;}}} else {for (Node<E> x = first; x != null; x = x.next) {if (o.equals(x.item)) {unlink(x);return true;}}}return false;}E unlink(Node<E> x) {// assert x != null;final E element = x.item;final Node<E> next = x.next;final Node<E> prev = x.prev;if (prev == null) {first = next;} else {prev.next = next;x.prev = null;}if (next == null) {last = prev;} else {next.prev = prev;x.next = null;}x.item = null;size--;modCount++;return element;}//根据index删除public E remove(int index) {checkElementIndex(index);return unlink(node(index));}

5、和ArrayList比较

  • 顺序插入的话ArrayList比较快,因为ArrayList基于数组实现的,只要望指定位置加一个数据即可,但是LinkedList顺序插入时,需要创建一个对象。
  • LinkList比ArrayList更加耗内存,因为LinkedList里面不仅维护了待插入的元素,还维护了Entry的前置Entry和后继Entry。
  • LinkedList和ArrayList插入和删除
  • LiskedList做插入和删除操作时,慢在寻址,快在只需要改变前后entry的应用地址
  • ArrayList做插入和删除操作时,快在寻址,慢数组的批量copy。
  • 针对各自的遍历最高的方式,ArrayList遍历效率要比LinkedList效率普片要高一点。
  • ArrayList实现了RandomAccess接口,LinkedList没有实现,所以ArrayList用for遍历更快,LinkedList用foreach遍历更快。

LinkList集合详解相关推荐

  1. Java集合详解之Map

    一.首先看看集合框架体系图 从图中可以看到,Map接口扩展了Iterator接口,关于Iterator接口详解请移步:Iterator接口详解 二.Map是什么? Map<k,v>使用键值 ...

  2. 1.8 Collections类操作集合详解——排序,查找,复制

    Collections类操作集合详解 Collections 类是 Java 提供的一个操作 Set.List 和 Map 等集合的工具类. Collections 类提供了许多操作集合的静态方法,借 ...

  3. java list取值_Java集合详解

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

  4. php打印出函数的内容吗,PHP打印函数集合详解以及PHP打印函数对比详解(精)

    1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 1 echo() 可以同时输出多个字符串,可以多 ...

  5. 集合 (二) ----- Map集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 Map集合详解 一.Map集合基 ...

  6. 集合 (一) ----- 集合的基本概念与Collection集合详解

    相关文章: <集合 (一) ----- 集合的基本概念与Collection集合详解> <集合 (二) ----- Map集合详解> 文章目录 集合的基本概念 一.集合的分类 ...

  7. Java集合详解6:TreeMap和红黑树

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  8. 【Java-Java集合】Java集合详解与区别

    [Java-Java集合]Java集合详解与区别 1)概述 2)集合框架图 2.1.总框架图 2.2.Iterable 框架图 2.3.Map 框架图 3)List 3.1.ArrayList 类继承 ...

  9. Java集合详解4:HashMap和HashTable

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续19)
  2. 编程界称霸全球的10大算法,你到底了解几个呢?
  3. linux的php优化,linux优化转载
  4. python字符串与文本处理技巧(1):分割、首尾匹配、模式搜索、匹配替换
  5. Spark编程指南V1.4.0(翻译)
  6. shell管道重定向程序的实现
  7. 正则表达式的命名分组
  8. winforms中限定上传文件类型
  9. 【软件开发底层知识修炼】十九 GDB调试从入门到熟练掌握超级详细实战教程学习目录
  10. 绝地求生信号枪只能在服务器吗,绝地求生信号枪怎么用?信号枪刷新点及用法详解...
  11. Redis 中 BitMap 的使用场景
  12. python中json使用方法总结_python中的json总结
  13. 《恋上数据结构第1季》动态数组实现栈
  14. Java基础(1):Java简介和开发环境配置
  15. 对于如何彻底的卸载和删除Windows service,有如下方法
  16. 360宽带测速至少在我的网络环境里有设计缺陷
  17. Docker 停止容器
  18. Linux鼠标回报率修改,技术编辑帮您鼠标怎么调回报率
  19. 网页占满整个屏幕_html如何让body占满整个屏幕
  20. java类与对象实验报告心得体会_java上机实验心得体会报告(大全五篇)

热门文章

  1. 尚无忧货运物流app系统享集运转运uniapp系统
  2. 小米pro无法使用虚拟机
  3. shiro安全框架初识--shiro简介、认证与授权
  4. 色谈Java序列化:女孩子慎入 - 第280篇
  5. HIV艾滋最新研究成果进展(2021年11月)
  6. 《从你的全世界路过》(不想被剧透的就建议不要看了,哈哈哈)
  7. 矩阵初等变换的计算细节
  8. Zabbix配置企业微信群聊机器人告警
  9. Python的安装教程
  10. 微信小程序播放详情页,附带:点赞.双击点赞.单击控制视频播放.上下滑动切换视频等功能