Java LinkedList

news2024/11/18 19:32:49

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

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

一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接。

在这里插入图片描述

一个双向链表有三个整数值: 数值、向后的节点链接、向前的节点链接。

在这里插入图片描述

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

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

以下情况使用 ArrayList :

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

以下情况使用 LinkedList :

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

LinkedList 继承了 AbstractSequentialList 类。

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

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

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

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

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

在这里插入图片描述

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)返回一个由链表元素转换类型而成的数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/107123.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux软件安装

软件安装1.安装方式2.安装jdk3.安装Tomcat4.安装mysql5.安装lrzsz1.安装方式 2.安装jdk &#xff08;1&#xff09;使用 Xftp 将jdk的二进制包上传到 Linux。 关于 Xftp 的下载和安装看这里&#xff1a; https://blog.csdn.net/weixin_56680764/article/details/126335138 本文…

C++:using : using的四大用法总结

1&#xff1a;using声明&#xff08;引入单个名称&#xff09; using声明是将命名空间中某个名字单独引入到当前作用域&#xff0c;这使得我们在当前作用域下可以直接使用该名字而无需使用作用域限定符 :: 。 #include <string> using std::string; int main() {string…

TKDE2022 | 基于关系的协同过滤算法,利用注意力机制来学习物品关系的嵌入特征...

嘿&#xff0c;记得给“机器学习与推荐算法”添加星标鉴于经典的协同过滤算法的有效性和易用性&#xff0c;基于物品的协同过滤方法已被广泛应用于工业领域&#xff0c;并在近年来被广泛研究。基于物品的协同过滤方法的关键在于物品之间的相似度测量&#xff0c;但本文认为这是…

推荐系统学习笔记-推荐系统数据流

一般数据流 数据流的定义 数据流&#xff08;data stream&#xff09;是一组有序&#xff0c;有起点和终点的字节的数据序列。包括输入流和输出流。数据流最初是通信领域使用的概念&#xff0c;代表传输中所使用的信息的数字编码信号序列。这个概念最初在1998年由Henzinger提…

《软件开发本质论》笔记——如何衡量价值

目录 一、使用数值来表示价值的做法 二、大多数与金钱有关的衡量指标的局限性 三、有没有一个简单的衡量方式 四、价值评估更好的做法 个人理解的价值 一、使用数值来表示价值的做法 这种方式可能让我们滑入深渊。 比如 如果公司开发产品的目的是赚钱&#xff0c;那么就可…

记一次:Keepalived安装高可用操作

前言&#xff1a;现在有许多现成的高可用产品&#xff0c;比如阿里的产品等等&#xff0c;直接购买就可以使用。这个只是笔者自己私下练习使用&#xff0c;成功了。所以记一次总结过程 安装方式一 下载安装包&#xff1a;https://keepalived.org/download.html网址下载2.2.7版…

【小程序】第一个小程序——创建小程序项目

目录 小程序简介 第一个小程序 安装开发者工具 创建小程序项目 小程序简介 1. 小程序与普通网页开发的区别 2. 体验小程序 可使用手机微信(6.7.2 及以上版本)扫码下方小程序码&#xff0c;体验小程序&#xff1a; 第一个小程序 1. 点击注册按钮 使用浏览器打开 https…

【大数据技术】Spark MLlib机器学习库、数据类型详解(图文解释)

机器学习的定义 机器学习是一种通过利用数据&#xff0c;训练出模型&#xff0c;然后使用模型预测的一种方法。机器学习的构建过程是利用数据通过算法构建出模型并对模型进行评估&#xff0c;评估的性能如果达到要求就拿这个模型来测试其他的数据&#xff0c;如果达不到要求就…

【图神经网络】Pytorch图神经网络库——PyG基础操作

Pytorch图神经网络库——PyG基础操作图数据处理常用的基准数据库Mini-BatchesData Transforms图学习方法参考资料PyG&#xff08;PyTorch Geometric&#xff09;是一个基于PyTorch构建的库&#xff0c;可轻松编写和训练图神经网络&#xff08;GNN&#xff09;&#xff0c;用于与…

【Web安全】访问控制

目录 1、权限与授权 2、垂直权限管理 3、水平权限管理 4、OAuth 1、权限与授权 权限控制&#xff0c;或者说访问控制&#xff0c;指的是当用户需要执行某个操作时&#xff0c;系统对这种操作的权限限制就是权限控制。 在网络中&#xff0c;一般是通过路由设备或者防火墙建立…

[oeasy]python0031_挂起进程_恢复进程_进程切换

查看进程 回忆上次内容 上次修改了 $PATH 路径 把当前用户shiyanlou的宿主文件夹 ~ 添加到 $PATH 中这样 sleep.py 就可以被找到于是就可以被执行了 还可以把配置 $PATH 的脚本 放到 zsh的配置文件(~/.zshrc) 中 配置 ~/.zshrc 就可以 设置 zsh 环境下默认的 $PATH 在当前路径…

攻防世界-easytornado

题目 访问题目路径 分别点击一下看看 然后我去百度了一下md5(cookie_secretmd5(filename))发现这是一个叫模板注入的东西 什么是模板 简单来说&#xff0c;就是网站内容的动态部分&#xff0c;如果有一个网站的内容几乎相同&#xff0c;但只有某些部分发生改变&#xff0c;那么…

javaweb学习之会话技术CookieSession05

目录 1.会话技术 2.快速入门 3.实现原理 4.cookiel的细节 2.cookie能不能存中文 3.cookie共享问题 4.Cooie的特点和作用 5.综合案例 记录上一次访问时间 1.会话技术 1会话&#xff1a;一次会话中包含多次请求和响应。 *一次会话&#xff1a;浏览器第一次给服务器资源发…

新冠确诊阳性后的第二篇博客,一文带你学习文件上传漏洞

新冠确诊阳性后的第二篇博客&#xff0c;一文带你学习文件上传漏洞1.什么是文件上传漏洞2.不要使用黑名单规定上传文件类型3.绕过文件上传检查功能4.Apache文件解析问题5.IIS文件解析问题6.设计安全的文件上传功能1.什么是文件上传漏洞 文件上传漏洞是指用户上传了一个可执行的…

RabbitMQ管理界面

&#x1f341;博客主页&#xff1a;&#x1f449;不会压弯的小飞侠 ✨欢迎关注&#xff1a;&#x1f449;点赞&#x1f44d;收藏⭐留言✒ ✨系列专栏&#xff1a;&#x1f449;Linux专栏 &#x1f525;欢迎大佬指正&#xff0c;一起学习&#xff01;一起加油&#xff01; 目录&…

记录我の秋招之旅【23届 CV算法岗】

文章目录碎碎念春招实习华为实习魔幻秋招尘埃落定碎碎念 今年(2022年)的秋招不能说"非常困难"吧&#xff0c;只能说是"地狱难度"&#xff0c;相信参与或者从侧面了解过的同学们也能感同身受。从今年的三月份开始着手秋招&#xff0c;期间也一直忙着实验室…

【基于Transformer和可逆神经网络】

Effective Pan-Sharpening With Transformer and Invertible Neural Network &#xff08;基于Transformer和可逆神经网络的有效泛锐化&#xff09; 可逆神经网络1 可逆神经网络2 在遥感成像系统中&#xff0c;全色锐化是从高分辨率全色图像及其对应的低分辨率多光谱图像获得…

30岁之后想转行,可行吗?这20条建议让你少走弯路!

都说三十而立&#xff0c;可眼看着到了意气风发的年龄&#xff0c;却突然意识到自己仍一事无成&#xff0c;甚至连养活自己都是问题。30多岁&#xff0c;大多数人还要开始买房、买车、结婚生子&#xff0c;养家糊口&#xff0c;于是各种压力逼迫之下&#xff0c;就想到了转行&a…

移动硬盘中安装ubuntu系统——Vmware Workstation安装

一. 简介 对于一个程序开发者来说&#xff0c;电脑系统开发环境非常重要。要使用相同的系统环境&#xff0c;可以的方式有&#xff1a;1、携带电脑&#xff0c;2、携带安装了系统的移动硬盘。相比来说&#xff0c;第二种方式更理想&#xff0c;如果是第一种方式携带电脑的话&a…

基于java+springboot的民宿预订信息网站-计算机毕业设计

运行环境 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven 项目介绍 随着国民生…