三十二、Java LinkedList

news2024/11/24 9:05:06

 Java LinkedList

链表(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 minglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        sites.add("Weibo");
        System.out.println(sites);
    }
}

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

[Google, minglisoft, Taobao, Weibo]

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

在列表开头添加元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;

public classminglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        // 使用 addFirst() 在头部添加元素
        sites.addFirst("Wiki");
        System.out.println(sites);
    }
}

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

[Wiki, Google,minglisoft, Taobao]

在列表结尾添加元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;

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

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

[Google, minglisoft, Taobao, Wiki]

在列表开头移除元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;

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

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

[minglisoft, Taobao, Weibo]

在列表结尾移除元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;

public class minglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        sites.add("Weibo");
        // 使用 removeLast() 移除尾部元素
        sites.removeLast();
        System.out.println(sites);
    }
}

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

[Google, minglisoft, Taobao]

获取列表开头的元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;

public class minglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        sites.add("Weibo");
        // 使用 getFirst() 获取头部元素
        System.out.println(sites.getFirst());
    }
}

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

Google

获取列表结尾的元素:

实例

// 引入 LinkedList 类
import java.util.LinkedList;

public class minglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        sites.add("Weibo");
        // 使用 getLast() 获取尾部元素
        System.out.println(sites.getLast());
    }
}

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

Weibo

迭代元素

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

实例

// 引入 LinkedList 类
import java.util.LinkedList;

public class minglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        sites.add("Weibo");
        for (int size = sites.size(), i = 0; i < size; i++) {
            System.out.println(sites.get(i));
        }
    }
}

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

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

Google
minglisoft
Taobao
Weibo

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

实例

// 引入 LinkedList 类
import java.util.LinkedList;

public class minglisoftTest {
    public static void main(String[] args) {
        LinkedList<String> sites = new LinkedList<String>();
        sites.add("Google");
        sites.add("minglisoft");
        sites.add("Taobao");
        sites.add("Weibo");
        for (String i : sites) {
            System.out.println(i);
        }
    }
}

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

Google
minglisoft
Taobao
Weibo

常用方法

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

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

相关文章

JavaEE——Servlet中的session

之前的博客中提到&#xff0c;cookie是为了浏览器能够在本地保存数据而产生的机制&#xff0c;是在浏览器工作的。而session则是与之对应的&#xff0c;在客户端工作的。一个服务器对应多个客户端&#xff0c;每个客户端都有自己的session&#xff0c;以sessionId为key&#xf…

python进阶(28)import导入机制原理

前言 在Python中&#xff0c;一个.py文件代表一个Module。在Module中可以是任何的符合Python文件格式的Python脚本。了解Module导入机制大有用处。 1. Module组成 一个.py文件就是一个module。Module中包括attribute, function等。 这里说的attribute其实是module的global vari…

[ros2实操]2-ros2的消息和ros1的消息转换

记录一下ros2和ros1消息互传的操作 !!!需要注意的是,只有ros1订阅了相关ros2的消息时,ros1_bridge节点才会转发相关消息. 参考链接 1,docker镜像链接:待定 2,github教程:Bridge communication between ROS 1 and ROS 2 一.准备步骤 为在自己原来的系统ubuntu1804上同时安装…

[附源码]SSM计算机毕业设计基于ssm的电子网上商城JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

通过五个维度比较分析关键容灾技术

【摘要】每一种容灾技术方案,可以从实现的技术复杂度、需要投入的成本、需要承担的风险、技术的先进性、技术的成熟度等几个方面来综合评估,寻求适合企业的最佳技术组合方案。本文对几类关键容灾技术进行了比较分析。(文中涉及相关技术产品最新参数请以官网最新发布为准) …

【SpringBoot】SpringBoot开启MyBatis缓存+ehcache(一二级缓存和myBatis的差不多,第三方缓存是jar包的不一样)

文章目录第三方缓存1、导jar包2、配置文件ehcache.xml3、EnableCaching开启缓存4、application.yml读取配置文件5、使用缓存&#xff08;注解Cacheable&#xff09;Cacheable的三个属性&#xff1a;value、key和condition▶测试&#xff1a;root对象可以用来生成keyCachePutCac…

LeetCode HOT 100 —— 4.寻找两个正序数组的中位数

题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 思路 正序数组&#xff0c;立即推—>二分查找 如果本题不要求时间复杂度O&#xff08;log…

光点数据可视化解决方案,助力新型智慧城市打造_光点科技

随着城市化进程的快速发展&#xff0c;智慧城市逐渐从理论理念演变为实践。智慧城市作为一个极其复杂的城市数字化建设和运营系统&#xff0c;涵盖了大量的智能交通、智能物流、智能公园等子系统。对于智慧城市解决方案提供商和集成商来说&#xff0c;其数据可视化产品的统一监…

View的绘制流程

view的绘制流程主要为measure&#xff0c;layout&#xff0c;draw三个阶段 View与window的逻辑结构如图所示&#xff1a; ViewRootImpl&#xff08;替代ViewRoot&#xff09;类&#xff0c;是连接WindowMannager和DecorView的纽带&#xff0c;View的三大流程均是通过ViewRoot完…

godoc安装与go文档查询

前言 最近在用go语言做项目&#xff0c;语法还是很简单的&#xff0c;但是API不熟悉&#xff0c;&#x1f605;&#xff0c;另外也没有类似Java的Spring这样的独秀的IOC和AOP框架&#xff0c;灵活度很大&#xff0c;经常需要查询文档&#xff0c;但是godoc从go1.14.2开始就从内…

【CNN】MobileNet——卷积神经网络中轻量级的经典

前言 MobileNet 系列 是 Andrew G. Howard&#xff08;Google Inc.&#xff09; 等人于 2017 年&#xff08;其实是 2016 年先于 Xception 已经提出&#xff0c;但是直到 2017 年才挂到 arXiv 上&#xff09;在 MobileNets: Efficient Convolutional Neural Networks for Mobi…

干货 | 如何在子查询和联接之间选择

在 联接与子查询&#xff1a;哪个更快&#xff1f;文章我们了解到连接往往比子查询执行得更快。话虽如此&#xff0c;这并不是一条通用准则&#xff0c;因此你可能不希望自动假设联接更可取。正如那篇文章中提到的&#xff0c;如果你需要在查询添加许多联接&#xff0c;数据库服…

分治算法Divide and Conquer

评价 它可以减少运行的时间&#xff0c;很多问题如果暴力求解需要O(n^2)的复杂度&#xff0c;而通过分治可以减少到O&#xff08;nlogn&#xff09; 当与随机化技术相结合时&#xff0c;分治的功能很强大 分治算法的步骤 1.先将大的问题分解为一个个小的子问题 2.对每一个子…

swift内存绑定

swift提供了3种不同的API来绑定/重新绑定指针 assumingMemoryBound(to:)bindMemory(to: capacity:)withMemoryRebound(to: capacity: body:) 绕过编译器检查 - assumingMemoryBound 就是假定内存绑定 func testPointer(_ p: UnsafePointer<Int>) {print(p) } let tup…

Tomcat运行流程、Servlet运行原理以及常用API

文章目录Servlet原理Tomcat 的定位Tomcat 的伪代码Tomcat 初始化流程Tomcat处理请求总结Servlet的核心APIHttpServletHttpServletRequestHttpServletResponseCookie 和 SessionServlet原理 Servlet终究是属于应用层&#xff0c;它是在应用层进行的一系列操作&#xff0c;它的底…

Prometheus Operator 实战 监控 etcd 集群

上节课和大家讲解了 Prometheus Operator 的安装和基本使用方法&#xff0c;这节课给大家介绍如何在 Prometheus Operator 中添加一个自定义的监控项。 除了 Kubernetes 集群中的一些资源对象、节点以及组件需要监控&#xff0c;有的时候我们可能还需要根据实际的业务需求去添…

Java 后端 本地调试-获取微信公众号 openId

Java 后端 本地调试-获取微信公众号 openId申请测试微信公众号内网穿透工具配置公众号获取用户 openId申请测试微信公众号 微信测试公众号 内网穿透工具 netapp 配置公众号 搜索网页账号选项 点击修改&#xff0c;填写内网穿透的域名 获取用户 openId 1 第一步&#xff…

国家高新技术企业的好处

国家高新技术企业的好处&#xff1a;享受税收减免优惠政策&#xff1b;国家科研经费支持和财政拨款&#xff1b;国家级的资质认证硬招牌&#xff1b;提升企业品牌形象&#xff1b;促进企业科技转型&#xff1b;提高企业市场价值&#xff1b;提高企业资本价值&#xff1b;吸引市…

【电脑讲解】电脑如何实现双系统

核心提示&#xff1a;电脑双系统&#xff0c;大家应该不会太陌生&#xff0c;有的网吧就装的是双系统&#xff0c;双系统可以满足不同人群的需要&#xff0c;可以这样说&#xff0c;一个系统可以专门工作使用&#xff0c;另一个可以供玩游戏使用&#xff0c;&#xff08;电脑硬…

[Linux打怪升级之路]-环境变量

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、认识环…