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

【java】LinkedList 和 ArrayList的简介与对比

Java LinkedList和 ArrayList 在使用上,几乎是一样的。由于LinkedList是基于双向链表的,会多出list.getFirst();获取头部元素等方法

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的地址。

链表可分为单向链表和双向链表。

一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。
在这里插入图片描述

Java LinkedList(链表) 类似于 ArrayList,是一种常用的数据容器。

与 ArrayList 相比,LinkedList 的增加和删除的操作效率更高,而查找和修改的操作效率较低。

以下情况使用 ArrayList :
频繁访问列表中的某一个元素。 只需要在列表末尾进行添加和删除元素操作。

以下情况使用 LinkedList :
你需要通过循环迭代来访问列表中的某些元素。 需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。

Java LinkedList的优点包括:

  1. 基于双向链表实现,增删改的效率很高,不需要考虑扩容问题,只需要记住前一个和后一个节点就可以了。
  2. 可以当作队列来使用。

Java LinkedList的缺点包括:

  1. 链表的遍历时间复杂度是O(n),所以随机读非常慢。
  2. LinkedList在生产中使用较ArrayList少很多,因为一般程序都是读多写少,而LinkedList更适合写多读少的情况。

========================

Java LinkedList是一种基于链表的数据结构,它提供了动态调整容量的功能,可以随时插入和删除元素。以下是Java LinkedList的使用方法:

  1. 创建LinkedList对象:
LinkedList<Integer> list = new LinkedList<Integer>();
  1. 添加元素:
list.add(10); // 在链表末尾添加元素
list.add(0, 20); // 在链表头部添加元素
list.addFirst(5); // 在链表头部添加元素
list.addLast(15); // 在链表尾部添加元素
  1. 获取元素:
int element = list.get(0); // 获取指定位置的元素
element = list.getFirst(); // 获取链表头部的元素
element = list.getLast(); // 获取链表尾部的元素
  1. 删除元素:
list.remove(0); // 删除指定位置的元素
list.removeFirst(); // 删除链表头部的元素
list.removeLast(); // 删除链表尾部的元素
  1. 修改元素:
list.set(0, 20); // 修改指定位置的元素值
  1. 获取链表长度:
int size = list.size(); // 获取链表长度
  1. 遍历链表:
for (int element : list) {// 遍历链表中的每个元素并执行操作
}
for (int i = 0; i < list.size(); i++) {int element = list.get(i); // 获取指定位置的元素// 执行操作
}
//遍历
for(int i : list){System.out.println(i);
}

以上是Java LinkedList的基本使用方法,可以根据具体需求进行进一步的操作。

http://www.lryc.cn/news/144341.html

相关文章:

  • 机器学习基础14-算法调参(基于印第安糖尿病Pima数据集)
  • ASUS华硕天选4笔记本电脑FA507XV原厂Windows11系统22H2
  • IET独立出版 | EI检索 | 2023年第三届机械、航空航天与汽车工程国际会议
  • 【Pytorch】CUDA error: no kernel image is available for execution on the device
  • dolphinschedule配置企微告警服务(WeChat群组)
  • Git中smart Checkout与force checkout
  • Java“牵手”1688商品跨境属性数据,1688API接口申请指南
  • Win解答 | 解决键盘中 字母+空格 导致的输入法弹窗导致的一系列问题
  • WPF读取dicom序列:实现上一帧、下一帧、自动播放、暂停
  • homeassistant ubuntu自启动 网络设置
  • 生成式AI背景下编程工作者的技术和高级软考理论的演进融合之路
  • RabbitMQ的镜像队列
  • 【Spring Boot】数据库持久层框架MyBatis — Spring Boot构建MyBatis应用程序
  • 【校招VIP】专业课考点之session cookie
  • IDEA集成Git相关操作知识(pull、push、clone)
  • Springboot 整合 Redis配置
  • Spark 启动时,报JAVA_HOME is not set
  • 运用Python解析HTML页面获取资料
  • 硬件名词--单片机,开发板和芯片
  • Ubuntu20.04下安装搜狗输入法Linux版
  • springboot RabbitMQ客户端连接故障恢复
  • centos下配置SFTP且限制用户访问目录
  • A - 最短路径
  • 自然语言处理(三):基于跳元模型的word2vec实现
  • 1.1 数据库系统简介
  • WebGL 绘制圆点
  • 迅为RK3588开发板Android12 设置系统默认不锁屏
  • 香港服务器速度快的原因
  • 过滤器,监听器与拦截器的区别
  • clickhouse ssb-dbgen数据构造 及 clickhouse-benchmark简单压测