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

【Java系列】LinkedList

在这里插入图片描述

LinkedList

  • 介绍
  • 使用 LinkedList 的情况
    • 使用 ArrayList 的情况
  • LinkedList 的基本使用
    • LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:
    • 创建一个简单的链表实例:
    • 在列表开头添加元素
    • 在列表结尾添加元素:
    • 在列表开头移除元素:
    • 获取列表结尾的元素:
    • 迭代元素
    • 也可以使用 for-each 来迭代元素:
  • 常用方法
  • 系列文章
  • 版本记录

在这里插入图片描述

介绍

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

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

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

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。
在这里插入图片描述

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

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

使用 LinkedList 的情况

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

LinkedList 继承了 AbstractSequentialList 类。

LinkedList 实现了 Queue 接口,可作为队列使用。

LinkedList 实现了 List 接口,可进行列表的相关操作。

LinkedList 实现了 Deque 接口,可作为队列使用。

LinkedList 实现了 Cloneable 接口,可实现克隆。

LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

在这里插入图片描述

使用 ArrayList 的情况

  • 频繁访问列表中的某一个元素。
  • 只需要在列表末尾进行添加和删除元素操作。

LinkedList 的基本使用

LinkedList 类位于 java.util 包中,使用前需要引入它,语法格式如下:

// 引入 LinkedList 类
import java.util.LinkedList; LinkedList<E> list = new LinkedList<E>();   // 普通创建方法
或者
LinkedList<E> list = new LinkedList(Collection<? extends E> c); // 使用集合创建链表

创建一个简单的链表实例:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");System.out.println(sites);}
}

以上实例,执行输出结果为:

[Google, Runoob, Taobao, Weibo]

更多的情况下我们使用 ArrayList 访问列表中的随机元素更加高效,但以下几种情况 LinkedList 提供了更高效的方法。

在列表开头添加元素

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");// 使用 addFirst() 在头部添加元素sites.addFirst("Wiki");System.out.println(sites);}
}

以上实例,执行输出结果为:

[Wiki, Google, Runoob, Taobao]

在列表结尾添加元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");// 使用 addLast() 在尾部添加元素sites.addLast("Wiki");System.out.println(sites);}
}

以上实例,执行输出结果为:

[Google, Runoob, Taobao, Wiki]

在列表开头移除元素:

实例
// 引入 LinkedList 类

import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");// 使用 removeFirst() 移除头部元素sites.removeFirst();System.out.println(sites);}
}

以上实例,执行输出结果为:

[Runoob, Taobao, Weibo]
在列表结尾移除元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");// 使用 removeLast() 移除尾部元素sites.removeLast();System.out.println(sites);}
}

以上实例,执行输出结果为:

[Google, Runoob, Taobao]
获取列表开头的元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");// 使用 getFirst() 获取头部元素System.out.println(sites.getFirst());}
}

以上实例,执行输出结果为:

Google

获取列表结尾的元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");// 使用 getLast() 获取尾部元素System.out.println(sites.getLast());}
}

以上实例,执行输出结果为:

Weibo

迭代元素

我们可以使用 for 配合 size() 方法来迭代列表中的元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");for (int size = sites.size(), i = 0; i < size; i++) {System.out.println(sites.get(i));}}
}

size() 方法用于计算链表的大小。

以上实例,执行输出结果为:

Google
Runoob
Taobao
Weibo

也可以使用 for-each 来迭代元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;public class RunoobTest {public static void main(String[] args) {LinkedList<String> sites = new LinkedList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Weibo");for (String i : sites) {System.out.println(i);}}
}

以上实例,执行输出结果为:

Google
Runoob
Taobao
Weibo

常用方法

方法描述
public boolean add(E e)链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public void add(int index, E element)向指定位置插入元素。
public boolean addAll(Collection c)将一个集合的所有元素添加到链表后面,返回是否成功,成功为 true,失败为 false。
public boolean addAll(int index, Collection c)将一个集合的所有元素添加到链表的指定位置后面,返回是否成功,成功为 true,失败为 false。
public void addFirst(E e)元素添加到头部。
public void addLast(E e)元素添加到尾部。
public boolean offer(E e)向链表末尾添加元素,返回是否成功,成功为 true,失败为 false。
public boolean offerFirst(E e)头部插入元素,返回是否成功,成功为 true,失败为 false。
public boolean offerLast(E e)尾部插入元素,返回是否成功,成功为 true,失败为 false。
public void clear()清空链表。
public E removeFirst()删除并返回第一个元素。
public E removeLast()删除并返回最后一个元素。
public boolean remove(Object o)删除某一元素,返回是否成功,成功为 true,失败为 false。
public E remove(int index)删除指定位置的元素。
public E poll()删除并返回第一个元素。
public E remove()删除并返回第一个元素。
public boolean contains(Object o)判断是否含有某一元素。
public E get(int index)返回指定位置的元素。
public E getFirst()返回第一个元素。
public E getLast()返回最后一个元素。
public int indexOf(Object o)查找指定元素从前往后第一次出现的索引。
public int lastIndexOf(Object o)查找指定元素最后一次出现的索引。
public E peek()返回第一个元素。
public E element()返回第一个元素。
public E peekFirst()返回头部元素。
public E peekLast()返回尾部元素。
public E set(int index, E element)设置指定位置的元素。
public Object clone()克隆该列表。
public Iterator descendingIterator()返回倒序迭代器。
public int size()返回链表元素个数。
public ListIterator listIterator(int index)返回从指定位置开始到末尾的迭代器。
public Object[] toArray()返回一个由链表元素组成的数组。
public T[] toArray(T[] a)返回一个由链表元素转换类型而成的数组。

系列文章


内容地址 链接
JAVA系列Java介绍
JAVA系列Java 基础
JAVA系列ArrayList
=========================================================================
👊如果你对该系列文章有兴趣的话,欢迎持续关注博主动态,博主会持续输出优质内容👊

👊 博主很需要大家的支持,你的支持是我创作的不竭动力👊

👊 ~ 点赞收藏+关注 ~👊
=========================================================================

版本记录


  • 2023-10-27 第一版

相关文章:

  • requirements.txt用法你真的清楚吗
  • 1819_ChibiOS的互斥信号与条件变量
  • Idea Debug断点太多 启动太慢
  • 【易售小程序项目】后端部署、Uniapp项目Web部署
  • electron27+react18集成搭建跨平台应用|electron窗口多开
  • 皮卡丘RCE靶场通关攻略
  • Linux——文件权限属性和权限管理
  • 简述JVM
  • EVE111
  • 讲述为什么要学习Adobe XD以及 Adobe XD下载安装
  • Centos安装RabbitMQ,JavaSpring发送RabbitMQ延迟延时消息,JavaSpring消费RabbitMQ消息
  • Java中作为数据库某个表的实体类为什么一定要实现Serializable接口
  • js中的Formdata数据结构
  • Bayes决策:身高与体重特征进行性别分类
  • Kafka-Java二:Spring配置kafka消息发送端的缓冲区
  • 07.Android之多媒体问题
  • Angular数据绑定机制
  • Consul Config 使用Git做版本控制的实现
  • gulp 教程
  • JAVA并发编程--1.基础概念
  • JS数组方法汇总
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Logstash 参考指南(目录)
  • Mocha测试初探
  • python大佬养成计划----difflib模块
  • springMvc学习笔记(2)
  • vue2.0项目引入element-ui
  • Vue2.x学习三:事件处理生命周期钩子
  • 分布式熔断降级平台aegis
  • 工作手记之html2canvas使用概述
  • 模型微调
  • 怎么把视频里的音乐提取出来
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​HTTP与HTTPS:网络通信的安全卫士
  • ​你们这样子,耽误我的工作进度怎么办?
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • # 安徽锐锋科技IDMS系统简介
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (07)Hive——窗口函数详解
  • (6)STL算法之转换
  • (论文阅读40-45)图像描述1
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (一)Linux+Windows下安装ffmpeg
  • (转)Linux整合apache和tomcat构建Web服务器
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • *setTimeout实现text输入在用户停顿时才调用事件!*
  • .net 反编译_.net反编译的相关问题
  • .net 生成二级域名
  • .NET6实现破解Modbus poll点表配置文件
  • [BZOJ3757] 苹果树
  • [CISCN2019 华东北赛区]Web2
  • [GN] DP学习笔记板子
  • [Java开发之路](14)反射机制
  • [Jenkins] Docker 安装Jenkins及迁移流程
  • [js]js设计模式小结