Java LinkedList类详解

news2024/11/19 1:29:56

目录

什么是LinkedList

LinkedList的使用

LinkedList的构造

LinkedList的其他常用方法的介绍

LinkedList的遍历

ArrayList和LinkedList的区别


什么是LinkedList

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

 在集合框架中,LinkedList也实现了List接口。

说明:

1.LinkedList实现了List接口

2.LinkedList的底层实现了双向链表

3.LinkedList没有实现RandomAccess接口,因此LinkedList不支持随机访问

4.LinkedList的任意位置插入和删除元素时效率比较高,时间复杂度为O(1)

5.LinkedList比较适合任意位置的插入场景

LinkedList的使用

LinkedList的构造

方法解释
LinkedList()无参构造
public LinkedList(Collection<? extends E> c)

使用其它集合容器中元素构造List

举个例子:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        //构造一个空的LinkedList
        List<Integer> list1 = new LinkedList<>();
        
        //构建一个ArrayList数组,并添加元素
        List<String> list2 = new ArrayList<>();
        list2.add("JavaSE");
        list2.add("JavaWeb");
        list2.add("JavaEE");
        //使用ArrayList构造LinkedList
        List<String> list3 = new LinkedList<>(list2);
    }
}

LinkedList的其他常用方法的介绍

方法解释
boolean add(E e)尾插元素e
void add(int index, E element)将e插入index的位置
boolean addAll(Collection<? extends E> c)尾插c中的元素
E remove(int index)删除index位置的元素
boolean remove(Object o)删除遇到的第一个o
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<E> subList(int fromIndex, int toIndex)截取部分list
import java.util.LinkedList;
import java.util.List;

public class Test {
    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());//7
        System.out.println(list);//1 2 3 4 5 6 7

        //在起始位置插入零
        list.add(0, 0);//add(elem):在index位置插入elem
        System.out.println(list);//0 1 2 3 4 5 6 7

        list.remove();//remove():删除第一个元素,内部调用的是removeFirst()
        list.removeFirst();//removeFirst():删除第一个元素
        list.removeLast();//removeLast():删除最后一个元素
        list.remove(1);//remove(index):删除index位置的元素
        System.out.println(list);//2 4 5 6

        
        //contains(elem):检测elem元素是否存在,如果存在返回true,否则返回false
        if(!list.contains(1)) {
            list.add(0, 1);
        }
        list.add(1);
        System.out.println(list);//1 2 4 5 6 1
        System.out.println(list.indexOf(1));//indexOf(elem):从前往后找到第一个elem的位置
        //0
        System.out.println(list.lastIndexOf(1));//lastIndexOf(elem):从后向前找第一个1的位置
        //5
        int elem = list.get(0);
        list.set(0, 100);//将index位置的元素设置为elem
        System.out.println(list);//100 2 4 5 6 1
        //subList(from, to):用list中的(from, to)之间的元素构造一个新的LinkedList返回
        List<Integer> copy = list.subList(0,3);
        System.out.println(list);
        System.out.println(copy);//100 2 4:注意java中是左闭右开的,所以不包含序号为三的结点
        list.clear();//将list中的元素清空
        System.out.println(list.size());//0
    }
}

LinkedList的遍历

import java.util.LinkedList;
import java.util.ListIterator;

public class Test {
    public static void main(String[] args) {
        LinkedList<Integer> list = new LinkedList<>();
        list.add(1);
        list.add(2);
        list.add(3);
        list.add(4);
        list.add(5);
        list.add(6);
        list.add(7);
        System.out.println(list.size());
        //foreach遍历
        for(int e : list) {
            System.out.print(e + " ");
        }
        System.out.println();
        //使用迭代器进行遍历-正向遍历
        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();
    }
}

补充:迭代器的是使用

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorTest {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        //添加元素到集合中
        Iterator<String> iterator = list.listIterator();

        while(iterator.hasNext()) {
            String element = iterator.next();
            //处理元素
        }
        iterator.remove();
    }
}

使用流程

1.获取集合的迭代器对象:通过调用集合的iterator方法获取迭代器对象。例如,对于ArrayList集合,可以使用iterator()方法获取迭代器对象。

2.遍历集合元素:通过使用迭代器的hasNext()和next()方法来遍历集合中的元素。hasNext()方法用于检查是否还有下一个元素,next()方法用于获取下一个元素的值。

ArrayList和LinkedList的区别

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

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

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

相关文章

高速USB转4路RS422串口

基于480Mbps 高速USB转8路串口芯片CH344Q&#xff0c;可以为各类主机扩展出4个独立的串口。CH344芯片支持使用操作系统内置的CDC串口驱动&#xff0c;也支持使用厂商提供的VCP串口驱动程序&#xff0c;可支持Windows、Linux、Android、macOS等操作系统。因CDC类协议和类驱动的原…

Java开发需要的网络基础知识,搞清楚计算机网络底层原理

作者&#xff1a;逍遥Sean 简介&#xff1a;一个主修Java的Web网站\游戏服务器后端开发者 主页&#xff1a;https://blog.csdn.net/Ureliable 觉得博主文章不错的话&#xff0c;可以三连支持一下~ 如有需要我的支持&#xff0c;请私信或评论留言&#xff01; 前言 计算机基础是…

企业内部通讯,WorkPlus助您打造高效沟通平台

企业内部通讯是一个组织高效运营的重要组成部分。随着企业规模的扩大和分布式办公的普及&#xff0c;高效的内部沟通变得尤为关键。作为一家领先品牌&#xff0c;WorkPlus为企业提供了一种先进的解决方案&#xff0c;帮助构建高效沟通平台&#xff0c;提升组织内部协作与协同能…

Windows Server 2008 R2安装CVE-2023-35359相关补丁问题及自动进入修复模式无法启动的问题处理

近日微软发布了Windows紧急高危漏洞“Windows权限提升漏洞”&#xff0c;漏洞编号为&#xff1a;CVE-2023-35359&#xff0c;在Windows Server 2008 R2安装过程中出现系列问题&#xff0c;并出现了自动进入修复模式无法启动的问题&#xff0c;本文记录了相关处理过程。 一、Wi…

Win11恢复Win10右键菜单样式(互换)

Windows11正式版桌面右键菜单的折叠显示&#xff0c;本来很多常用的右键功能&#xff0c;反而需要额外多一次点击才能选中。所以很有网友需要将Win11的右键菜单替换成Win10那种直接显示所有命令的方式&#xff0c;以下就是操作方法&#xff1a; 打开命令提示符&#xff0c;以管…

Mysql生产随笔

目录 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 1.2常见错误解决方案 2.关于时区 3.内存占用优化 记录一下生产过程中的一些场景和命令使用方法&#xff0c;不定期进行更新 1. Mysql批量Kill删除processlist 1.1查看进程、拼接、导出、执行 sho…

龙迅LT9611UXC 2PORT MIPICSI/DSI转HDMI(2.0)转换器+音频,内置MCU

龙迅LT9611UXC 1.描述&#xff1a; LT9611UXC是一个高性能的MIPI DSI/CSI到HDMI2.0转换器。MIPI DSI/CSI输入具有可配置的单 端口或双端口&#xff0c;1高速时钟通道和1~4高速数据通道&#xff0c;最大2Gbps/通道&#xff0c;可支持高达16Gbps的总带 宽。LT9611UXC支持突发…

基于Spring Boot的IT技术交流和分享平台的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 我国科学技术的不断发展&#xff0c;计算机的应用日渐成熟&#xff0c;其强大的功能给人们留下深刻的印象&#xff0c;它已经应用到了人类社会的各个层次的领域&#x…

三大bean的实例化方法

1.使用构造方法(常用) 构造方法可以是私有的,因为bean的实例化使用的是反射 但是构造方法不能是有参构造,否则会报错 2.静态工厂(了解-----老方法) class配置的是工厂类名 只配class还不行,不然创建的是工厂对象,需要把工厂里面的方法配置一下,也就是factory-method 3.使用…

leetcode621 任务调度器

题目 给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行&#xff0c;并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间&#xff0c;CPU 可以完成一个任务&#xff0c;或者处于待命状态。 …

AI时代的中国困境: ChatGPT为什么难以复制

如今&#xff0c;几乎所有中国互联网大厂都公布了自己的“类ChatGPT”解决方案&#xff0c;有些还公布了背后的关于AI技术模型的详情。 其中最高调的是百度&#xff0c;其“文心一言”解决方案号称即将接入数十家内容平台和数以百计的媒体、自媒体。腾讯公布的微信 AI 模型“W…

【C++】C++ 类中的 this 指针用法 ② ( 常量成员函数 | const 修饰成员函数分析 )

文章目录 一、常量成员函数1、const 修饰成员函数分析2、常量成员函数3、错误代码示例 - 常量成员函数修改成员变量 二、完整代码示例 一、常量成员函数 1、const 修饰成员函数分析 在 C 类中 , 普通的非静态成员函数 , 可以使用 const 进行修饰 , 在 下面的 Student 类中 , 定…

SpringBoot 集成 AKKA

文章目录 应用场景与 SpringBoot 集成示例 应用场景 AKKA 是一个用于构建高并发、分布式和容错应用程序的开源框架。它基于Actor模型&#xff0c;提供了强大的并发抽象和工具&#xff0c;适用于各种业务场景。以下是一些使用AKKA框架的常见业务场景的示例&#xff1a; 实时数据…

【AD】【操作】怎么只选择走线和过孔?(或者是自己选择 要选中的类型)

1. properties 中的 selection filter 选择自己要的&#xff0c;然后到PCB中进行框选 2. ctrl H 选择整条线&#xff0c;以及这条线物理上连接的焊盘 3.选中线的一部分&#xff0c;按tab 按1次选中整条线&#xff0c;不包括 元器件&#xff0c;按2次是选中整个网络&#x…

每日一题~修剪二叉树

原题链接&#xff1a;669. 修剪二叉搜索树 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路分析&#xff1a; 由题可知&#xff0c;我们要将原来的二叉搜索树调整为值在 low~high 之间的新二叉搜索树&#xff0c;接下来我们分析一下针对不同的节点的处理方…

基于SpringBoot的免税商品优选购物商城

目录 前言 一、技术栈 二、系统功能介绍 登录界面 管理员功能模块 商家功能模块 用户前台功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 四、文章目录 前言 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过…

安卓机型不需要解锁bl 不需要root 即可安装模块 框架 VirtualXposed使用步骤分析

​​​​​​安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤 通过以上两个博文基本可以了解手机正常安装框架的步骤。但很多机型局限于不能解锁bl和root&#xff0c;那么这些机型能不能使…

【大虾送书第十一期】适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

目录 &#x1f96e;写在前面 &#x1f96e;内容简介 &#x1f96e;读者对象 &#x1f96e;专家推荐 &#x1f96e;目录 &#x1f96e;文末福利 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;免费送书活动专栏地址 写在前面 CTF比赛是快…

【re】BUUCTF Java逆向解密

题目&#xff1a;BUUCTF Java逆向解密 没壳&#xff0c;是java文件&#xff08;大概&#xff09; ida打开看不懂&#xff0c;找了网页上的java反编译 Decompiler.com 没用过java啊…暂且用sublime打开 还好还挺好懂的 import java.util.ArrayList; import java.util.Scanner;p…

Mysql主从数据恢复随笔

目录 1.使用pt-table-checksum插件安装方式如下 2.在主节点执行检查数据同步情况 3.同步检查出现的问题 3.1没有sock文件 3.2 Authentication plugin ‘sha256_password’ cannot be loaded: /usr/lib64/mysql/plugin/sha256_password.so: 无法打开共享对象文件: 没有那个文…