java原生LinkedList详解

news2024/11/23 14:59:33

java原生LinkedList详解

实际上在IDEA,JDK环境下的LinkList底层就是一个双向链表,由于链表没有将元素存储在连续的空间中,元素存储在单独的节点中,然后通过引用将节点连接起来了,因此在在任意位置插入或者删除元素时,不需要搬移元素,效率比较高。
在这里插入图片描述
在集合框架中,LinkedList也实现了List接口
在这里插入图片描述

原生的LinkedList的继承和实现接口如下
在这里插入图片描述

LinkedList的特点

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

LinkList的使用

构造函数

 public LinkedList() {
    }

    /**
     * Constructs a list containing the elements of the specified
     * collection, in the order they are returned by the collection's
     * iterator.
     *
     * @param  c the collection whose elements are to be placed into this list
     * @throws NullPointerException if the specified collection is null
     */
    public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
    }

无参构造函数没有什么需要说明的.
重点看public LinkedList(Collection<? extends E> c)这个有参的构造函数
先来解释一下这句代码 首先这个构造方法的形参整体的类型是一个Collection<? extends E>类型,形参名是c。Collection<? extends E>类型表明该类型必须是实现了Collection(可以理解为集合的意思)接口的一个类(换句话说就是这个类必须是一个集合),所以从下图中可以得知ArrayList、LinkedList、Vetor等都是可以的。
在这里插入图片描述此外,<? extends E>表明这个集合里面的元素类型是一个泛型,比如是String、Integer、Float等,而且这个泛型是E类型或者E的子类都是可以的,比如可以为Integer,也可以是int。?是通配符。
而整个带参数的构造函数的作用就是将集合c中的所有?类型的元素复制一份作为新的LinkedList类型集合的元素

实例

import java.util.ArrayList;
import java.util.LinkedList;
public class main {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("hello");
        System.out.println(arrayList);
        LinkedList<String>  linkedList = new LinkedList<String>(arrayList);//arrList实现了Conection接口,并且泛型为String ,符合是String或者String子类的要求,而这个带参数的构造函数的作用就将arraylist里面的的元素内容全部复制到linkedList里面来,创建一个新的linkedList对象
        linkedList.add("bai xian");
        System.out.println(linkedList);
        LinkedList<String> linkedList1 = new LinkedList<>(linkedList);
        System.out.println(linkedList1);
    }
}

在这里插入图片描述

public class main {
    public static void main(String[] args) {
        ArrayList<String> arrayList = new ArrayList<String>();
        arrayList.add("hello");
        System.out.println(arrayList);
        LinkedList<Integer>  linkedList = new LinkedList<Integer>(arrayList);//这样就报错了。因为String不是Integer的子类
    }
}

在这里插入图片描述

LinkedList的其他常用方法介绍

在这里插入图片描述
就不一一列举了,有兴趣的可以去看我的另一篇博客LinkList的模拟实现,那里面模拟实现了上述的所有方法。这里给个实例。

实例

public class main {
    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);
// 在起始位置插入0
        list.add(0, 0); // add(index, elem): 在index位置插入元素elem
        System.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,否则返回false
        if(!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): 获取指定位置元素
        list.set(0, 100); // set(index, elem): 将index位置的元素设置为elem
        System.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());
    }
}

在这里插入图片描述

LinkedList的遍历

LinkList遍历主要有三种方式,一种是用for—each遍历,一种最常见的用while循环遍历,还有一种使用跌迭代器遍历

实例

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
public class main {
    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());
// 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();
    }
}

在这里插入图片描述
至此LinkList的学习就告一段落了。

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

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

相关文章

DMA控制两路DAC同时输出指定波形

0. 实验目标 使用 DMA 控制 DAC1 和 DAC2 同时输出不一样的波形&#xff0c;实验平台STM32F407ZG 1. 原理部分 1.1 DMA DMA 全称为&#xff1a;Direct Memory Access&#xff0c;即直接存储器访问。DMA 传输方式无需 CPU 直接控制传输&#xff0c;也没有中断处理方式那样保…

mycat2主从配置实现读写分离

mycat2主从配置实现读写分离 在https://blog.csdn.net/zhangxue_wei/article/details/130840504基础上继续搭建 1.创建mycat数据源&#xff0c;可以在navcat里直接执行 1.1读数据源m1 /* mycat:createDataSource{"dbType":"mysql","idleTimeout&qu…

Cisco Secure Web Appliance Virtual 15.0 发布 - 适用于网络安全的思科高级威胁防护

Cisco Secure Web Appliance Virtual, AsyncOS for WSA 15.0.0 LD 请访问原文链接&#xff1a;https://sysin.org/blog/cisco-secure-web-appliance-15/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Cisco Secure Web Appli…

Windows Server 2022 中文版、英文版下载 (updated May 2023)

Windows Server 2022 中文版、英文版下载 (updated May 2023) Windows Server 2022 正式版&#xff0c;2023 年 5 月更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-server-2022/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&a…

西南交通大学智能监测 培训课程练习1

2023.05.24培训 task1&#xff1a;ER的用法、对应数据库的设计 task2&#xff1a;熟悉数据库基本操作、使用Navicat 目录 一、E-R图是什么 二、E-R图的组成要素 三、E-R图绘制 四、E-R图实例 4.1E-R图转换到关系模式 4.2具体数据表设计 五、Mysql基础操作 5.1操作数据库…

燃料电池系统控制技术的演进

背景 随着环保意识的不断提高&#xff0c;对清洁能源的需求也日益增加。燃料电池作为一种高效、低污染的清洁能源&#xff0c;受到了广泛关注和重视。与传统燃烧发电相比&#xff0c;燃料电池具有高效、无污染、静音等优点&#xff0c;可以成为未来清洁能源的主要来源之一。 …

docker拉取镜像报错Error response from daemon: Get https://registry-1.docker.io/v2/:

阅读前请看一下&#xff1a;我是一个热衷于记录的人&#xff0c;每次写博客会反复研读&#xff0c;尽量不断提升博客质量。文章设置为仅粉丝可见&#xff0c;是因为写博客确实花了不少精力。希望互相进步谢谢&#xff01;&#xff01; 文章目录 阅读前请看一下&#xff1a;我是…

chatgpt赋能python:Pythonshutil.move:一个强大的文件移动工具

Python shutil.move&#xff1a;一个强大的文件移动工具 文件的移动和重命名是我们日常工作中经常会碰到的操作之一。Python的shutil模块提供了很多方便的工具&#xff0c;其中shutil.move是其中一个强大的工具&#xff0c;可以在文件系统中移动和重命名文件。在本文中&#x…

chatgpt赋能python:Python模型保存的完整指南:如何保存和加载模型

Python模型保存的完整指南&#xff1a;如何保存和加载模型 介绍 Python是一个十分强大的编程语言&#xff0c;它的简单易用的语法和丰富的库使其成为了机器学习开发者的首选。在机器学习领域&#xff0c;我们经常需要训练和保存模型&#xff0c;以便在实际应用中使用。本文将…

SpringCloud:(图书预约的操作)

借阅图书的操作主要是添加借阅记录&#xff1a; 在这张表上添加记录&#xff0c;并在t_book这张表上扣除库存的操作 下面我们开始进行操作&#xff1a; 首先我们创建t_borrow表的实体类在book项目中&#xff1a; package com.laosan.book.entity;import lombok.Data;import j…

成都PMP培训机构有推荐的吗?

PMP考试是不是必须要报班&#xff1f;自学可以考试吗&#xff1f;不需要报班的话&#xff0c;自学难度大吗&#xff1f;成都PMP培训机构有推荐的吗&#xff1f; 首先&#xff0c;PMP考试并非必须要报班&#xff0c;自学也可以考试。但是需要注意的是&#xff0c;PMP考试难度较大…

Centos7.9基于Kubeasz部署k8s 1.27.1高可用集群

一&#xff1a;kubeasz 的介绍 kubeasz 致力于提供快速部署高可用k8s集群的工具, 同时也努力成为k8s实践、使用的参考书&#xff1b; 基于二进制方式部署和利用ansible-playbook实现自动化&#xff1b;既提供一键安装脚本, 也可以根据安装指南分步执行安装各个组件。 kubea…

简单分享在微信上扫码点餐小程序怎么做

目前市场上有很多扫码点餐的小程序系统&#xff0c;制作方法有三种&#xff1a; 1、使用微信商家推出的扫码点餐小程序&#xff0c;上传营业执照和食品经营许可证就可以开通使用&#xff0c;然后上传自己的菜品信息就可以了&#xff0c;功能相对比较简单。 2、购买餐饮系统公司…

java链表——LinkList详解

LinkList详解 注&#xff1a;在学习LinkList之前可以先去看一下我的另一篇博客单链表的定义及其模拟实现——java https://editor.csdn.net/md/?articleId130642627&#xff0c;有助于本博客的理解 ArrayList和LinkedList的区别 LinkList模拟实现 定义三个类&#xff1a;MyL…

数据中台建设浪费,数据分析系统如何设计,听听 Gartner 怎么说

2023 年数据分析趋势&#xff1a;数据即业务、从平台到生态、以人为中心 作者 | 宋慧 出品 | CSDN 云计算 数据的价值被越来越多的行业用户看到。不过各种数据系统百花齐放&#xff0c;前几年关于数据中台的讨论仍然众说纷纭。国际研究机构 Gartner 持续对数据分析市场做了调研…

动态规划-数位DP

数字游戏 题目 链接&#xff1a;https://www.acwing.com/problem/content/1084/ 科协里最近很流行数字游戏。 某人命名了一种不降数&#xff0c;这种数字必须满足从左到右各位数字呈非下降关系&#xff0c;如 123 123 123&#xff0c; 446 446 446。 现在大家决定玩一个游…

杂记阅读(三)

目录 校徽和校训 权杖 学术竞赛与荣誉 香港罗德学人 中国大陆罗德学者 富布赖特项目 海外 学友 本土发展 海外扩展 史匹爾財富管理調查 880年&#xff0c;悉尼大学获得了一笔可观的捐赠。富商和慈善家约翰亨利查雷斯在遗嘱中将他的大部分遗产赠予悉尼大学。经过身为…

JavaScript WebAPI 实战

博主简介&#xff1a;想进大厂的打工人博主主页&#xff1a;xyk:所属专栏: JavaEE初阶 本篇文章为大家带来JavaScript WebAPI的使用&#xff0c;请各位过目~~ 目录 文章目录 一、什么是JavaScript WebAPI 1.1 什么是DOM 二、常用的DOM API 2.1 获取元素 2.2 什么是事件 2.2.1 …

Hive数据分层有哪些优点?具体每一层含义是什么?

为什么要分层? 作为一名数据的规划者&#xff0c;我们肯定希望自己的数据能够有秩序地流转&#xff0c;数据的整个生命周期能够清晰明确被设计者和使用者感知到。直观来讲就是如图这般层次清晰、依赖关系直观。 但是&#xff0c;大多数情况下&#xff0c;我们完成的数据体系却…

深度学习基础知识-误差反向传播+训练技巧(无代码仅用来理解)

参考书籍&#xff1a;&#xff08;找不到资源可以后台私信我&#xff09; 《深度学习入门&#xff1a;基于Python的理论与实现 (斋藤康毅)》 《Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow, 2nd Edition (Aurelien Geron [Gron, Aurlien])》 神经网络…