当前位置: 首页 > news >正文

Java中的linkedList类及与ArrayList的异同

继承实现关系

public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Deque<E>, Cloneable, java.io.Serializable

 由于涉及的类过多,画起来过于繁琐,这里只展示最外层的继承实现关系

可以看到它是继承自AbstractSqquentialList,并且实现了多个接口类,感兴趣的小伙伴可以去深入查看LinkedList具体怎样实现了它们的方法。

与ArrayList的相同之处

和ArrayList类似,LinkedList也是集合的一种,也是用来存放对象类型的数据的,而且存放对象的类型可以不同,由于都继承自Collection类,他们都有一些相同的方法,作用也是相同的,比如添加数据删除数据这些。

与ArrayList的不同之处

光看名字就可以看出来,ArrayList是以数组为存储结构,底层是一个对象数组,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;}}

除了存储对象以外,每个节点都有一个指向前面的引用和一个指向后面的引用

由这个存储结构的不同我们可以区分它们的特点

1.ArrayList由于底层是数组,所以用来查询和修改的效率是很高的,时间复杂度可以达到O(1),而增加和删除的时间复杂度为O(n),而且特殊情况下需要重新分配空间,效率低下

2.LinkedList底层是双向链表,用来增加和删除节点的效率是很高的,时间复杂度可以达到O(1),而如果想要查询和修改需要遍历链表,效率较低

常用方法

1.添加元素

(1)    public boolean add(E e)

第一种方法和ArrayList的一样,括号中传入要加入集合中的对象,会默认插入到链表的末尾

		LinkedList l=new LinkedList();l.add("test1");//默认插入到链表末尾

(2)public void add(int index, E element)

和ArrayList的方法一样,第一个参数传入要插入的位置,后面传入要插入的对象,注意下标不能超过链表中实际的元素数量

		LinkedList l=new LinkedList();l.add("test1");//默认插入到末尾l.add(1,"test2");//插入到链表中下标为1的地方

(3)public void addFirst(E e)

看方法名就可以猜出来,这个方法会将传入的对象插入到链表的最前面

		LinkedList l=new LinkedList();l.add("test1");//默认插入到末尾l.add(1,"test2");//插入到链表中下标为1的地方l.addFirst("testfirst");//插入到链表最前面

(4)public void addLast(E e)

看方法名就可以猜出来,这个方法会将传入的对象插入到链表的最后面,其实第一个add方法就是调用了这个方法,将对象插入到末尾

		LinkedList l=new LinkedList();l.add("test1");//默认插入到末尾l.add(1,"test2");//插入到链表中下标为1的地方l.addFirst("testfirst");//插入到链表最前面l.addLast("testlast");//插入到链表最后面

2.删除元素

(1)public E remove() 

删除并返回第一个元素

(2)public E remove(int index)

删除指定下标处的元素。

(3)public boolean remove(Object o)

删除传入的元素,返回是否成功,成功为 true,失败为 false。

(4)public E removeFirst()

删除并返回第一个元素。

(5)public E removeLast()

删除并返回最后一个元素。

(6)public void clear()

清空链表。

还有很多常用的方法这里就不再阐述了,等用到的时候再去搜,不必要马上就记住,知道了LinkedList的特性就好了,在了解他和ArrayList的异同。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • opencv彩色图像转灰度图原理
  • .net 获取某一天 在当月是 第几周 函数
  • 【go】pprof 性能分析
  • 什么是CPU、GPU、NPU?(包懂+会)
  • 为什么eBay的防IP关联很重要?
  • react | 自学笔记 | 持续更新
  • 深拷贝与数据扁平化封装打开即用
  • java --- 性能优化01
  • Linux:体系结构和操作系统管理
  • Flutter的升级和降级步骤
  • QMT软件怎么申请开通?QMT软件到底是谁在用啊?QMT量化软件K线驱动介绍
  • tensor连接和拆分
  • 搜维尔科技:ART光学空间定位虚拟交互工业级光学跟踪系统
  • sourcetree配置ssh连接gitee
  • 中国企业500强!最新名单揭晓→
  • JavaScript-如何实现克隆(clone)函数
  • FineReport中如何实现自动滚屏效果
  • javascript面向对象之创建对象
  • js面向对象
  • leetcode386. Lexicographical Numbers
  • Linux编程学习笔记 | Linux IO学习[1] - 文件IO
  • oschina
  • PHP变量
  • Redis在Web项目中的应用与实践
  • spring + angular 实现导出excel
  • tab.js分享及浏览器兼容性问题汇总
  • Vue2.x学习三:事件处理生命周期钩子
  • yii2权限控制rbac之rule详细讲解
  • 包装类对象
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 关于 Linux 进程的 UID、EUID、GID 和 EGID
  • 技术:超级实用的电脑小技巧
  • 简单实现一个textarea自适应高度
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 《天龙八部3D》Unity技术方案揭秘
  • 阿里云API、SDK和CLI应用实践方案
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (论文阅读笔记)Network planning with deep reinforcement learning
  • (七)Flink Watermark
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (一)SpringBoot3---尚硅谷总结
  • .Net Core 笔试1
  • .net 发送邮件
  • .net 受管制代码
  • .NET框架设计—常被忽视的C#设计技巧
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • // an array of int