进阶JAVA篇-深入了解 List 系列集合

目录

        1.0 List 类的说明

         1.1 List 类的常用方法

        1.2 List 集合的遍历方式

        2.0 ArrayList 集合的底层原理

       2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因:

         2.2 ArrayList 集合的优缺点

        3.0 LinkedList 集合的底层原理

        3.1 从 LinkedList 集合的底层原理来了解具有该特性的原因:

        3.2 LinkedList 集合的优缺点

        3.3 LinkedList 集合的特有方法


        1.0 List 类的说明

        在 Java 中,List 类是 Java 集合框架中的一种接口,它是一种有序的可重复的集合,用于存储多个元素。List 接口Collection 接口子接口它定义了一系列方法来操作和访问列表中的元素,所以 List 接口继承了 Collection 接口的方法。

有关的 Collection 接口的常用 API 介绍在以下链接:

进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式-CSDN博客

         1.1 List 类的常用方法

以代码的形式来介绍这些方法:

import java.util.ArrayList;
import java.util.List;public class Text_List {public static void main(String[] args) {//由于 List 是一个接口,不能直接去创建对象,//所以用 List 的实现类来创建一个对象,比如 ArrayListList<String> list = new ArrayList<>();//这是一行经典的代码!!!list.add("张三");list.add("李四");list.add("王五");System.out.println(list);//输出结果为:[张三, 李四, 王五]//1. add(index, element):在指定位置插入一个元素。list.add(1,"张麻子");System.out.println(list);//输出结果为:[张三, 张麻子, 李四, 王五]//2. remove(index):移除并返回指定位置的元素。list.remove(1);System.out.println(list);//输出结果为:[张三, 李四, 王五]//3. set(index, element):将指定位置的元素替换为新的元素。list.set(1,"张麻子");System.out.println(list);//输出结果为:[张三, 张麻子, 王五]//4. get(index):返回指定位置的元素。String a = list.get(1);System.out.println(a);//输出结果为:张麻子}
}

运行结果为:

        1.2 List 集合的遍历方式

        除了 List 系列集合继承 Collcetion类的三个遍历方式之外,还支持普通的带索引的 for 循环。

 有关的 Collection 类的三个遍历方式的介绍在以下链接:

进阶JAVA篇- Collection 类的常用的API与 Collection 集合的遍历方式-CSDN博客

        由于 List 系列集合支持支持有序的,所以可以使用普通带索引的 for 循环。

代码如下:

import java.util.ArrayList;
import java.util.List;public class Text_List {public static void main(String[] args) {List<String> list = new ArrayList<>();//这是一行经典的代码!!!!list.add("张三");list.add("李四");list.add("王五");System.out.println(list);//用普通的 for 循环来遍历以上集合for (int i = 0; i < list.size(); i++) {String a = list.get(i);System.out.println(a);}}
}

运行结果如下:

        

        2.0 ArrayList 集合的底层原理

        由于 ArrayListList 的实现类,所以 ArrayList 特性与 List 接口是一致的,有序、可重复、有索引的特性。

       2.1 从 ArrayList 集合的底层原理来了解具有该特性的原因:

        ArrayList 集合是基于数组实现的,简单来说,ArrayList 集合就是一个可变长度的数组。因此可以解释为什么 ArrayList 集合具有有序、可重复、有索引的特性,是因为数组都具备这些特性。

        创建的 ArrayList 集合的对象在底层的过程:

        

import java.util.ArrayList;
import java.util.List;public class Text_List {public static void main(String[] args) {//首先,利用无参构造器创建的集合,会在底层创建一个默认长度为0的数组List<String> list = new ArrayList<>();//这是一行经典的代码!!!!//当添加第一个元素的时候,会创建一个新的默认长度为10的数组list.add("a");}
}

        需要注意的是:

        1. 假如数组存满的时候会创建一个新的已扩容1.5倍的数组,然后将原来旧的数组里面的数据,迁移到新的已扩容的数组中来。

        2. 如果一次添加多个元素,1.5倍还是放不下,则新创建数组的长度以实际为准。

         2.2 ArrayList 集合的优缺点

        因为 ArrayList 是基于数组实现的,所以可以根据数组的特性来了解该集合的优缺点,由于数组是支持索引查找元素的,所以该集合的优点是很明显,查找元素特别的快。但是对于增添、删除、修改的操作来说是很慢的。

        所以 ArrayList 适合:根据索引查询数据。不适合:频繁对元素进行操作。

        3.0 LinkedList 集合的底层原理

        由于 LinkedListList 的实现类,所以 LinkedList 特性与 List 接口是一致的,有序、可重复、有索引的特性,但是与 ArrayList 在底层的原理是不一样的。

        3.1 从 LinkedList 集合的底层原理来了解具有该特性的原因:

        LinkedList 集合是基于双链表实现的。

简答介绍以下双链表:

        链表中的每一个节点都是独立的对象,也就是说内存不是连续的,每一个节点都包含记录上一个节点的地址还有下一个节点的地址、数值。

        3.2 LinkedList 集合的优缺点

        根据该集合的数据结构为双链表,每查询一个元素是从头或者尾一步一步地去查询的,而不能直接去找到其中的元素,所以查询是很慢的。对于增加、删除、修改元素的速度相对来说是快的。但是有两个节点很特殊,对于头、尾节点无论查询还是增加、删除、修改元素速度都很快的。

        所以 LinkedList 集合适合:频繁对元素操作的。不合适:大量的查找元素。

        3.3 LinkedList 集合的特有方法

以代码的形式来介绍:

import java.util.LinkedList;
public class Text_LinkedList {public static void main(String[] args) {LinkedList<String> list = new LinkedList<>();list.add("张三");list.add("李四");list.add("王五");System.out.println(list);//输出结果为:[张三, 李四, 王五]//1. addFirst() :在该列表开头插入指定的元素list.addFirst("王麻子");System.out.println(list);//输出结果为:[王麻子, 张三, 李四, 王五]//2. addLast() :将指定的元素追加到此列表的末尾list.addLast("张麻子");System.out.println(list);//输出结果为:[王麻子, 张三, 李四, 王五, 张麻子]//3. getFirst() :返回此列表中的第一个元素String a = list.getFirst();System.out.println(a);//输出结果为:王麻子//4. getLast() :返回此列表中的最后一个元素String b = list.getLast();System.out.println(b);//输出结果为:张麻子//5. removeFirst() :从此列表中删除并返回第一个元素list.removeFirst();System.out.println(list);//输出结果为:[张三, 李四, 王五, 张麻子]//6. removeLast() :从此列表中删除并返回最后一个元素list.removeLast();System.out.println(list);//输出结果为:[张三, 李四, 王五]}
}

运行结果如下:

        根据 LinkedList 集合的数据结构的特性,其应用场景可以是用设计队列(先进先出,后进后出),还可以用来设计(先进后出,后进先出)。



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

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

相关文章

Elasticsearch 8.X 如何生成 TB 级的测试数据 ?

1、实战问题 我只想插入大量的测试数据&#xff0c;不是想测试性能&#xff0c;有没有自动办法生成TB级别的测试数据&#xff1f;有工具&#xff1f;还是说有测试数据集之类的东西&#xff1f;——问题来源于 Elasticsearch 中文社区https://elasticsearch.cn/question/13129 2…

修改docker 版本的mysql 8.0 本机Navicat 连不上的问题

1.进入容器 docker exec -it xxxx bash 2.使用root账号登录mysql mysql -u root -p 3.查看当前加密方式 use mysql; SELECT Host, User, plugin from user; 我这是改过了&#xff0c;应该都是caching_sha2_password 4. 修改加密方式 ALTER USER root% IDENTIFIED WITH m…

solidworks安装时,出现这个错误:无法获得下列许可SOLIDWORKS Standard.无效的(不一致的)使用许可号码。(-8,544,0)

问题描述&#xff1a;在安装SolidWorks2023时&#xff0c;按照软件管家中的步骤&#xff0c;但是在打开SolidWorks2023桌面上的快捷键时&#xff0c;出现了这个错误&#xff1a; 无法获得下列许可SOLIDWORKS Standard.无效的&#xff08;不一致的&#xff09;使用许可号码。(-…

C语言——从键盘任意输人一个三位数的自然数,求该数个位、十位、百位上的数字之和

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,ge,shi,bai;printf("输入一个三位数整数&#xff1a;\n");scanf("%d",&i);gei%10; //个位shii%100/10; //十位baii/100; //百位printf("个位:%d,十位:%d,百位:…

Hadoop学习总结(Shell操作)

HDFS Shell 参数 命令参数功能描述-ls查看指定路径的目录结构-du统计目录下所有文件大小-mv移动文件-cp复制文件-rm删除文件 / 空白文件夹-put上传文件-cat查看内容文件-text将源文件输出文本格式-mkdir创建空白文件夹-help帮助 一、ls 命令 ls 命令用于查看指定路径的当前目录…

电脑发热发烫,具体硬件温度达到多少度才算异常?

环境&#xff1a; 联想E14 问题描述&#xff1a; 电脑发热发烫,具体硬件温度达到多少度才算异常? 解决方案&#xff1a; 电脑硬件的温度正常范围会因设备类型和使用的具体硬件而有所不同。一般来说&#xff0c;以下是各种硬件的正常温度范围&#xff1a; CPU&#xff1a;正…

[NLP] 使用Llama.cpp和LangChain在CPU上使用大模型

一 准备工作 下面是构建这个应用程序时将使用的软件工具: 1.Llama-cpp-python 下载llama-cpp, llama-cpp-python [NLP] Llama2模型运行在Mac机器-CSDN博客 2、LangChain LangChain是一个提供了一组广泛的集成和数据连接器&#xff0c;允许我们链接和编排不同的模块。可以常…

[正式学习java②]——数组的基本使用,java内存图与内存分配

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 目录 一、数组的两种初始化方式 1.完整格式(静态初始化) 2.动态初始化 二、数组的遍历方式 三、数组的开辟与访问 四、数组的注意事项 1.数组直接打印打印的是地址值 2.数组在内存图中的位置 3.数组一旦开辟了…

【C语言】二分查找(含图解)

文章目录 1. 二分查找思想2. 代码实现2.1 未封装函数2.2 封装函数&#xff08;使用while循环&#xff09;2.3 封装函数&#xff08;使用递归&#xff09; 1. 二分查找思想 二分法&#xff1a;二分查找算法是一种在有序数组中查找某一特定元素的搜索算法&#xff0c;其思想就是…

预处理、编译、汇编、链接

或者一步条指令 gcc helloworld.c -o helloworld 1.预处理 宏替换去注释引入头文件 #之后的语句都是预处理语句&#xff0c; #include<iostream> 将该文件的内容拷贝到现有文件中&#xff0c;结果得到一个C程序&#xff0c;通常是以.i作为文件扩展名的。 2.编译 词…

【JAVA】我们该如何规避代码中可能出现的错误?(二)

个人主页&#xff1a;【&#x1f60a;个人主页】 系列专栏&#xff1a;【❤️初识JAVA】 文章目录 前言异常方法&#xff08;Throwable类&#xff09;Throwable类的方法 捕获异常多重捕获块 前言 异常是程序中的一些错误&#xff0c;但并不是所有的错误都是异常&#xff0c;并…

Pygame游戏实战四:打砖块

介绍模块 本游戏使用的是由Pycharm中的pygame模块来实现的&#xff0c;也可以在python中运行。通过Pygame制作一个打砖块&#xff0c;通过击打砖块来得到更多的分数&#xff0c;看看这个是你小时候玩的游戏吗&#xff1f; 最小开发框架 详情请看此文章&#xff1a;Pygame游戏…

Java 性能优化之直接使用成员变量 VS 拷贝副本

背景 刷到一个大佬的 CSDN 博客&#xff0c;仔细看了一下性能优化专栏。联想到我们的日常开发工作&#xff0c;由于业务比较简单&#xff0c;很容就忽略性能问题。但是&#xff0c;性能优化的一下常见思路&#xff0c;也早有耳闻。看了一个 Java 性能优化的方法 「减少操作指令…

APISpace 手机号码归属地API接口案例代码

1.手机号码归属地API产品介绍 APISpace 的 手机号码归属地API&#xff0c;提供全国移动、联通、电信等手机号码归属地查询&#xff0c;上亿条数据囊括最新的170、166、147等号段&#xff0c;更新及时、准确度高。 2.手机号码归属地API详解 2.1 接口请求 请求方式&#xff1a…

Nodejs的安装以及配置(node-v12.16.1-x64.msi)

Nodejs的安装以及配置 1、安装 node-v12.16.1-x64.msi点击安装&#xff0c;注意以下步骤 本文设置nodejs的安装的路径&#xff1a;D:\soft\nodejs 继续点击next&#xff0c;选中Add to PATH &#xff0c;旁边的英文告诉我们会把 环境变量 给我们配置好 当然也可以只选择 Nod…

虚拟机没有桥接模式--物理机WiFi不见了--注册表修复

我们知道虚拟机有三种模式&#xff1a; vmnet0 桥接模式&#xff1b;vmnet1 仅主机模式&#xff1b;vmnet8 NAT模式 我自己以前一直用的NAT模式&#xff0c;今天突然要用到桥接模式&#xff0c;发现无法切换... 我下面这个是后面弄好了的&#xff0c;最开始是没有显示桥接模式…

七月论文审稿GPT第2版:从Meta Nougat、GPT4审稿到Mistral、LongLora

前言 如此前这篇文章《学术论文GPT的源码解读与微调&#xff1a;从chatpaper、gpt_academic到七月论文审稿GPT》中的第三部分所述&#xff0c;对于论文的摘要/总结、对话、翻译、语法检查而言&#xff0c;市面上的学术论文GPT的效果虽暂未有多好&#xff0c;可至少还过得去&am…

【C++干货铺】内存管理new和delete

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 C语言中动态内存管理方式 malloc/calloc/realloc的区别&#xff1f; C内存管理的方式 内置类型 自定义类型 operator new 和 operator delete 函数 operato…

MCU测试科普|如何进行MCU芯片测试,具体流程是什么?

MCU芯片测试系统是一种专门用于检测MCU芯片性能和质量的综合性设备。它通常由硬件和软件两部分组成&#xff0c;硬件包括测试仪器、适配器、测试夹具等&#xff0c;用于连接被测MCU芯片和测试机&#xff0c;实现高效高精度的测试。软件部分通常包括测试程序、测试管理软件等&am…

maven 上传本地jar包到nexus

maven上传命令 mvn deploy:deploy-file -DgroupIdcom.microsoft.sqlserver -DartifactIdsqljdbc4 -Dversion4.0 -Dpackagingjar -DfileC:\java\top-sdk-java-1.0.1-lib\lib\bcprov-jdk16-1.46.jar -Durlhttp://ip:port/repository/maven-releases/ -DrepositoryIdsnapshot…