LinkedList底层实现——头尾、双向节点

  

LinkedList的类继承结构图

1. LinkedList对象的创建

1.1 参数为空的构造方法的方法体为空。

1.2 Collection对象作为参数的构造方法——将Collection集合对象的元素添加至LinkedList中。

2. LinkedList添加元素

2.1 链表添加元素通过将节点连接进去即可,主要有四个方法,如下图。

2.2 上述添加元素的四种方法,其实底层实现对应的是三类:linkFirst,新节点作为首节点;linkBefore,新节点在链表中;linkLast,新节点作为尾结点。

2.3 然后,默认的add方法是调用linkLast方法,将新节点添加到链表尾部的。

3. LinkedList移除节点

3.1 LinkedList移除节点,也是直接通过指针指向,直接移除即可,主要有五个方法,如下图。

3.2 五种方法,其实底层实现主要是unlinkFirst,unlink,unlinkLast。

  

3.3 默认的remove方法是调用removeFirst方法,也就是移除链表的首节点,所以LinkedList是一种先入先出的方式。

4. 通过get或set方法获取某个索引的元素或者更改某个索引元素,主要通过node方法查找索引节点。平常说链表查询慢、数组查询快,其实查询指定位,也就是根据索引定位元素,数组直接根据索引取出元素,而链表需要一个一个节点遍历。

  

5. indexOf或者contains方法查找是否包含某个元素,使用的equals比较。

6. LinkedList的其它常用方法

6.1 LinkedList的性质让它对节点操作方式和队列一样,而且它实现了双端队列Deque接口,所以有一些队列的操作方法,主要是poll、offer以及peek方法,如下。

  

6.2 clear方法清空链表,我们可能认为将first和last节点置为null即可。但是事实上,为了确保链表的各节点能够被释放以及垃圾回收器回收,还是会对每个节点处理,如下。

详解java集合之LinkedList——底层实现是头尾、双向节点,尽情地问我有没有看过集合源码吧!相关推荐

  1. 3.5W 字详解 Java 集合

    点击关注公众号,实用技术文章及时了解 来源:binhao.blog.csdn.net/article/details/113279914 数据结构作为每一个开发者不可回避的问题,而 Java 对于不同 ...

  2. java集合for循环_详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...

  3. java使用集合存储过程_详解java调用存储过程并封装成map

    详解java调用存储过程并封装成map 发布于 2020-5-1| 复制链接 摘记: 详解java调用存储过程并封装成map           本文代码中注释写的比较清楚不在单独说明,希望能帮助到大 ...

  4. Java多线程系列(六):深入详解Synchronized同步锁的底层实现

    谈到多线程就不得不谈到Synchronized,很多同学只会使用,缺不是很明白整个Synchronized的底层实现原理,这也是面试经常被问到的环节,比如: synchronized的底层实现原理 s ...

  5. java内部格式_详解java内部类的访问格式和规则

    详解java内部类的访问格式和规则 1.内部类的定义 定义一个类来描述事物,但是这个事物其中可能还有事物,这时候在类中再定义类来描述. 2.内部类访问规则 ①内部类可以直接访问外部类中的成员,包括私有 ...

  6. 详解 Java NIO

    详解 Java NIO 文件的抽象化表示,字节流以及字符流的文件操作等属于传统 IO 的相关内容,我们已经在前面的文章进行了较为深刻的学习了. 但是传统的 IO 流还是有很多缺陷的,尤其它的阻塞性加上 ...

  7. java list for循环遍历_详解Java中list,set,map的遍历与增强for循环

    详解Java中list,set,map的遍历与增强for循环 Java集合类可分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 关于增强for ...

  8. 详解Java解析XML的四种方法

    http://developer.51cto.com  2009-03-31 13:12  cnlw1985  javaeye  我要评论(8) XML现在已经成为一种通用的数据交换格式,平台的无关性 ...

  9. 精通java图片_面试必备:详解Java I/O流,掌握这些就可以说精通了?

    Java IO概述 IO就是输入/输出.Java IO类库基于抽象基础类InputStream和OutputStream构建了一套I/O体系,主要解决从数据源读入数据和将数据写入到目的地问题.我们把数 ...

最新文章

  1. 网页性能优化之异步加载js文件
  2. c# 获取所有的进程的cpu使用率_Linux CPU使用率很高,但为啥却找不到高CPU的进程
  3. java 为什么重写equals一定要重写hashcode?
  4. ARC 没有自动释放内存
  5. 杂谈3之English
  6. ActiveMQ中的温度,存储和内存使用百分比
  7. mysql 10个日期,MySQL自学篇(10)——日期函数
  8. TensorBoard:嵌入可视化
  9. c++ 中引用()的用法和应用实例
  10. 游戏蛮牛Unity 用户文档
  11. linux - android安卓 - stagefright
  12. Fibonacci Heaps
  13. 网页标题logo添加与配置
  14. TCP控制拥塞的四种算法:慢开始,拥塞避免,快重传,快恢复
  15. 四大开源3d游戏引擎探究----irrlicht与orge对比
  16. 访问github时出现隐私设置错误您的连接不是私密连接问题的解决方案
  17. 别人家的思维导图,原来这么画!
  18. XAMARIN.ANDROID的安装
  19. Google的一个代理网站: 仅限技术搜索
  20. Excel表格垂直居中后还是不在单元格中间(探究原因贴)

热门文章

  1. 【转载】看板方式简介
  2. 【转】Postman安装与使用
  3. 面怎么煮更好吃?你必须知道的7个小技巧
  4. How to 删除小数点后面的零0
  5. 采购订单检查/保存BADI使用
  6. 启用轻资产、重运营、降杠杆,红星美凯龙能否瘦成“家得宝”?
  7. 从Q3财报看百度营销成长
  8. java的默认_java默认包的使用
  9. mac mysql 连接超时时间设置_MAC下mysql安装连接问题
  10. java 在线电影_java电影在线影评管理系统