【JavaDS】浅谈集合LinkedList的使用

news/2024/4/30 2:52:42/文章来源:https://blog.csdn.net/Trong_/article/details/127167564

在这里插入图片描述博客主页: XIN-XIANG荣
系列专栏:【Java实现数据结构】
一句短话: 难在坚持,贵在坚持,成在坚持!

文章目录

  • 一. 什么是LinkedList?
  • 二. LinkedList的使用
    • 1. 构造方法
    • 2. 常用方法
    • 3. LinkedList的遍历
  • 三. ArrayList和LinkedList的区别

一. 什么是LinkedList?

LinkedList的底层是双向链表结构,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。

img

在集合框架中,LinkedList也实现了List接口,具体如下:

img

【说明】

  1. LinkedList实现了List接口
  2. LinkedList的底层使用了双向链表
  3. LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问
  4. LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)

二. LinkedList的使用

1. 构造方法

方法解释
LinkedList()无参构造 , 创建一个新的空linkedList
LinkedList(Collection<? extends E> c)一个其他集合容器中元素构造List

代码示例:

public static void main(String[] args) {// 构造一个空的LinkedListList<Integer> list1 = new LinkedList<>();List<String> list2 = new java.util.ArrayList<>();list2.add("张三");list2.add("李四");list2.add("王五");// 使用ArrayList构造LinkedListList<String> list3 = new LinkedList<>(list2);}

2. 常用方法

方法解释
boolean add(E e)尾插 e
void add(int index, E element)将 e 插入到 index 位置
boolean addAll(Collection<? extends E> c)尾插 c 中的元素
boolean addAll(int index, Collection<? extends E> c)将 c 中的元素添加到指定位置
E remove(int index)删除 index 位置元素
boolean remove(Object o)删除遇到的第一个 o
E remove()删除第一个元素
E removeFirst()删除第一个元素
E removeLast()删除最后一个元素
E get(int index)获取下标 index 位置元素
E set(int index, E element)将下标 index 位置元素设置为 element
void clear()清空
boolean contains(Object o)判断 o 是否在线性表中
int indexOf(Object o)返回第一个 o 所在下标
int lastIndexOf(Object o)返回最后一个 o 的下标
List subList(int fromIndex, int toIndex)截取部分 list
int size()返回链表元素个数

代码示例:

public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>();list.add(1); // add(elem): 表示尾插list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);System.out.println(list.size());System.out.println(list);// 在起始位置插入0list.add(0, 0); // add(index, elem): 在index位置插入元素elemSystem.out.println(list);list.remove(); // remove(): 删除第一个元素,内部调用的是removeFirst()list.removeFirst(); // removeFirst(): 删除第一个元素list.removeLast(); // removeLast(): 删除最后元素list.remove(1); // remove(index): 删除index位置的元素System.out.println(list);// contains(elem): 检测elem元素是否存在,如果存在返回true,否则返回falseif(!list.contains(1)){list.add(0, 1);}list.add(1);System.out.println(list);System.out.println(list.indexOf(1)); // indexOf(elem): 从前往后找到第一个elem的位置System.out.println(list.lastIndexOf(1)); // lastIndexOf(elem): 从后往前找第一个1的位置int elem = list.get(0); // get(index): 获取指定位置元素System.out.println(elem);list.set(0, 100); // set(index, elem): 将index位置的元素设置为elemSystem.out.println(list);// subList(from, to): 用list中[from, to)之间的元素构造一个新的LinkedList返回List<Integer> copy = list.subList(0, 3);System.out.println(list);System.out.println(copy);list.clear(); // 将list中元素清空System.out.println(list.size());}

执行结果:

img

3. LinkedList的遍历

  • 通过for循环或者foreach遍历
public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>();list.add(1); // add(elem): 表示尾插list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);//通过for循环遍历int size = list.size();for (int i = 0; i < size; i++) {System.out.print(list.get(i)+" ");}System.out.println();//通过foreach遍历for (int e:list) {System.out.print(e + " ");}System.out.println();}

img

  • 通过迭代器遍历
public static void main(String[] args) {LinkedList<Integer> list = new LinkedList<>();list.add(1); // add(elem): 表示尾插list.add(2);list.add(3);list.add(4);list.add(5);list.add(6);list.add(7);// 使用迭代器遍历---正向遍历ListIterator<Integer> it = list.listIterator();while(it.hasNext()){System.out.print(it.next()+ " ");}System.out.println();// 此时迭代器指向的是链表最后一个元素后面的位置// 此时不能再去正向遍历, 因为后面已经没有元素了, 只能去反向遍历// 使用反向迭代器---反向遍历ListIterator<Integer> rit = list.listIterator(list.size());while (rit.hasPrevious()){System.out.print(rit.previous() +" ");}System.out.println();}

img

三. ArrayList和LinkedList的区别

不同点ArrayListLinkedList
存储空间上物理上一定连续逻辑上连续 , 但物理上不一定连续
随机访问支持 : 时O(1)不支持 : 时O(N)
插入/删除需要搬移元素 , 效率低 , 时O(N)只需要修改引用的指向 , 时O(1)
插入空间不够时需要扩容没有容量的概念
应用场景有限元素个数高效存储+频繁访问任意位置插入和删除频繁

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

什么是虚拟计算机集群

这个问题来自近期几位网友的私信&#xff0c;他们不约而同问到一个问题&#xff1a;什么是虚拟计算机集群&#xff1f;Laxcus分布式操作系统是如何做的&#xff1f;下面就正式回答一下这个问题。 在我们传统的认知里&#xff0c;或者大家平常比较多接触的&#xff0c;都…

Linux基本使用

文章目录一.Linux的安装1.Linux系统的安装方式2.网卡设置3.安装SSH连接工具4.Linux和Windows目录对比二.Linux命令1.Linux常用命令2.文件目录操作命令三.软件安装1.软件安装方式一.Linux的安装 1.Linux系统的安装方式 &#xff08;1&#xff09;物理机安装&#xff1a;直接将…

NVMe系列专题之六:电源管理

NVMe协议其中有一项优势,就是低功耗!为了达成这个目标,NVMe中加入了自动电源状态转换和动态电源管理机制。 先来看一下NVMe Spec中对动态电源管理的描述图: 1. Host设定性能和功耗: Power Objective和Performance Objective。 2. Host通知Controller更改设备的power state。…

tf.pad()

参考 tf.pad - 云社区 - 腾讯云 tf.pad(tensor,paddings,modeCONSTANT,nameNone,constant_values0 )pad一个张量。 这个操作根据指定的paddings填充一个tensor。padding是一个形状为[n, 2]的整数张量&#xff0c;其中n是张量的秩。对于输入的每个维度D&#xff0c;paddings[D, …

Python数据分析之单变量分析

0 引言 在数据分析或者机器学习过程中&#xff0c;我们需要对变量或者特征进行分析&#xff0c;在分析过程中&#xff0c;一般都会分为两种&#xff1a;单变量分析、双变量分析。今天&#xff0c;土豆简单介绍一下单变量分析&#xff0c;单变量分析主要对单个变量或者特征进行…

基金入门笔记

什么是基金 基金概念【fund】为了某种目的设立的具有一定规模的资金&#xff08;保险金、公积金也可以理解为其中的一种&#xff09;但是平常说的指的是证券投资基金。证券包含债券 股票和期货。而证券投资基金是由基金公司 保险工资或者银行推出的 从众多投资者处募集巨额资金…

【易购管理系统】导航折叠效果

在el-menu中添加 v-model“isCollapse” <el-menu router"true"default-active"/"class"el-menu-vertical-demo"background-color"#545c64"text-color"#fff"active-text-color"#ffd04b"v-model"isCollap…

[Java]通过反射获取运行时类的对象及其内部结构

文章目录1. 创建运行时类的对象2. 体会反射的动态性3. 通过反射获取运行时类的结构3.1 用于测试的类的准备3.2 获取运行时类的属性3.2.1 getFields()3.2.2 getDeclaredField()3.2.3 获取属性的结构3.3 获取运行时类的方法3.3.1 getMethods()3.3.2 getDeclaredMethods()3.3.3 获…

美食篇:大闸蟹与梭子蟹的区别

文章目录大闸蟹梭子蟹区别总结吃蟹子的季节大闸蟹 梭子蟹 区别总结 大闸蟹香&#xff0c;小&#xff0c;有黄 梭子蟹鲜&#xff0c;大&#xff0c;无黄 小的梭子蟹也有黄&#xff0c;小的便宜 总结&#xff1a;浓缩的都是精华&#xff01;个头大的不一定好吃&#xff0c;但一…

面积结构设计

面积结构设计 针对面积的拓扑是尽可能最大程度地复用逻辑资源,常常以流量(速度)为代价。 1、折叠流水线 折叠流水线可以优化在流水线赋值逻辑的流水线设计的面积。 定点的分数乘法器。A表示定点刚好在最低有效位(LSB)右边的归一化整数格式,输入B的定点刚好在最高有效…

Torch

张量 Tensor torch.is_tensor[source] torch.is_tensor(obj) 如果obj是一个pytorch张量&#xff0c;则返回True torch.is_storage(obj) torch.set_default_tensor_type(t) 设置pytorch中默认的浮点类型&#xff0c;一般使用pytorch进行运算时候使用的都是浮点数来进行计算…

Linux进程(冯诺依曼体系结构、操作系统、进程)

文章目录一、冯诺依曼体系结构&#xff1a;1.基本概念&#xff1a;2.为什么如此设计&#xff1a;2.1.运行速度优化&#xff1a;2.2.成本&#xff1a;3.总结&#xff1a;二、操作系统&#xff1a;1.基本概念&#xff1a;2.操作系统的作用&#xff1a;3.什么是管理&#xff1a;三…

【Shell编程】Bash变量-用户自定义变量

目录系列文章Bash变量-用户自定义变量变量的命名规则变量分类本地变量实例系列文章 【Shell编程】Shell基本概述与脚本执行方式 【Shell编程】Shell中Bash基本功能 Bash变量-用户自定义变量 变量的命名规则 不能以数字开头在Bash中&#xff0c;变量的默认类型都是字符串型&…

关于XShell下载安装和连接Ubuntu(linux)

目录 1.XShell下载和安装 其实很多CSDN博主已经发表很多关于这个下载安装和连接的问题&#xff0c;但是我发现都是不完整的&#xff0c;所以自己再根据大佬写的&#xff0c;重新总结一下。 XSheel下载地址 XSheel安装教程 XShell连接的话看下面的教程&#xff0c;上面中的X…

系统调用,库函数以及Linux下与进程相关的指令操作

文章目录操作系统怎么为我们提供服务什么是系统调用库函数和系统调用Linux系统下操作进程的相关指令fork系统调用操作系统怎么为我们提供服务 我们知道&#xff0c;操作系统是管理的软件。那么有的时候&#xff0c;用户需要服务&#xff0c;那么对应的操作系统就要提供对应的服…

实验5 开源控制器实践——POX

实验5 开源控制器实践——POX 基础实验hub分析: 由于在hub模式下,采取广播帧的模式,交换机每收到一帧,会向所有端口进行广播,因而h1发给h2的数据包在h3的端口也能监听到switch分析: 由于在自学习模式下,交换机会根据mac高速缓存信息进行发送数据包,因而在实验过程中,对…

设计模式解析---------------单例模式

单例模式定义 确保某一个类只有一个实例&#xff0c;而且自行实例化并向整个系统提供这个实例。 单例模式的使用场景 确保某个类只有一个对象的场景&#xff0c;避免产生多个对象消耗过多的资源&#xff0c;或者某种对象有且只能有一个。 单例模式的UML图 角色介绍&#xff1…

数字媒体概论——系统篇

一&#xff1a;需求分析 需求分析三大要素&#xff1a; 表达内容 -> 媒体种类面向人群 -> 交互方式使用方式 -> 硬件需求 例如&#xff1a;海洋馆需要一个可以展示海洋生物知识的媒体交互系统&#xff0c;可供多人同时观赏&#xff0c;主要面向儿童&#xff0c;这里…

计算机二级C语言题库(44套真题+刷题软件)第一套

刷题软件 gongzhonghao&#xff1a;露露IT 1、循环队列的存储空间为Q(1:100),初始状态为frontrear100。经过一系列正常的入队与退队操作后,frontrear99,则循环队列中的元素个数为( )。 A. 0或100 B. 1 C. 2 D. 99 本题考查知识点是循环队列。当队头和队尾指针指向同一个元素…

常见的图片格式介绍

常见的图片格式介绍 图片&#xff08;Picture&#xff09;包括图形、图像。图形&#xff08;Graph&#xff09;是矢量图&#xff08;Vector Drawn&#xff09;&#xff0c;图像&#xff08;Image&#xff09;是位图&#xff08;Bitmap&#xff09;。 图片&#xff08;Picture…