Java重修笔记 第四十二天 LinkedList 类、ArrayList 和 LinkedList 比较

LinkedList 类
  1. LinkedList 类底层是一个双向链表

  2. LinkedList 类中有两个属性 first 和 last ,他们分别指向首节点和尾节点

  3. 每个结点(LinkedList 的内部类 Node 对象)中有三个属性,prev 指向前一个结点、next 指向后一个结点、item 存储元素的值,来实现双向链表

  4. 双向链表只需要操作 prev 和 next 的指向就可以完成添加的删除操作,不存在数组扩容和数据前移的情况,所以 LinkedList 添加的删除的效率比较高

LinkedList 类常用方法
  1. public boolean add(E e)

将指定元素插入到链表的末尾

  1. public void add(int index, E element)

在指定位置插入

  1. public E remove()

删除链表的第一个元素

  1. public E remove(int index)

删除链表中指定位置的元素

  1. public boolean remove(Object o)

删除链表中第一次出现的该元素

  1. public E set(int index, E element)

替换指定位置的元素

  1. public E get(int index)

返回指定元素

  1. public int indexOf(Object o)

返回该元素的索引,找不到返回-1

  1. public int size()

返回元素个数

ArrayList 和 LinkedList 比较
  1. ArrayList 底层是可变数组

修改和查询的效率高,因为 ArrayList 可以通过索引直接定位

增加和删除的效率低,因为 ArrayList 要进行扩容

  1. LinkedList 底层是双向链表

修改和查询的效率低,因为 LinkedList 要从头结点一个一个遍历才能找到

增加和删除的效率高,因为 LinkedList 只需要修改指针指向即可,不存在扩容

如何选择 ArrayList 和 LinkedList
  1. 查询和修改的操作多就用 ArrayList , 修改和删除的操作多就用 LinkedList

  2. 实际开发中,80%以上都用的是 ArrayList

  3. ArrayList 和 LinkedList 都是线程不安全的

相关推荐
Otaku love travel14 分钟前
老系统改造增加初始化,自动化数据源配置(tomcat+jsp+springmvc)
java·tomcat·初始化·动态数据源
DKPT28 分钟前
Java设计模式之行为型模式(责任链模式)介绍与说明
java·笔记·学习·观察者模式·设计模式
L_autinue_Star43 分钟前
手写vector容器:C++模板实战指南(从0到1掌握泛型编程)
java·c语言·开发语言·c++·学习·stl
崔高杰1 小时前
微调性能赶不上提示工程怎么办?Can Gradient Descent Simulate Prompting?——论文阅读笔记
论文阅读·人工智能·笔记·语言模型
晨岳1 小时前
CentOS 安装 JDK+ NGINX+ Tomcat + Redis + MySQL搭建项目环境
java·redis·mysql·nginx·centos·tomcat
执笔诉情殇〆1 小时前
前后端分离(java) 和 Nginx在服务器上的完整部署方案(redis、minio)
java·服务器·redis·nginx·minio
元气小嘉1 小时前
前端技术小结
开发语言·前端·javascript·vue.js·人工智能
YuTaoShao1 小时前
【LeetCode 热题 100】24. 两两交换链表中的节点——(解法一)迭代+哨兵
java·算法·leetcode·链表
励志的大鹰哥1 小时前
V少JS基础班之第七弹
开发语言·javascript·ecmascript
程序员的世界你不懂1 小时前
(20)Java+Playwright自动化测试- 操作鼠标拖拽 - 上篇
java·python·计算机外设