Java基础之List

news/2024/5/3 13:36:52/文章来源:https://blog.csdn.net/qq_45344586/article/details/130028976

文章目录

    • 一、List介绍
    • 二、List常用方法 `List应知应会`
      • 2.1 调用add()方法增添数据(可指定位置添加)
      • 2.2 调用remove()方法删除指定位置元素并返回被删除元素
      • 2.3 调用set()方法修改指定位置元素并返回初始数据
      • 2.4 调用get()方法返回指定位置元素
    • 三、List可重复特点
    • 四、List存取顺序一致
    • 五、List有带索引的方法
      • 5.1 普通输出语句输出List集合
      • 5.2 普通for循环输出List集合
      • 5.3 forEach语句输出List集合
      • 5.4 Iterator迭代器输出List集合
    • 六、List删除指定值的数据
      • 6.1 删除指定值的数据漏删数据 `常见问题`
    • 6.2 漏删数据解决办法

一、List介绍

List是集合体系中较为重要的接口,它具有单列存储的特点,即一次只能添加一个元素。它具有三大特点:
可重复:当存入相同数据时,可以有重复的数据存入,这是因为List集合有带索引的方法,可以通过索引值不同来辨别那些相同的数据。
存取顺序一致:存入数据的顺序与输出数据的顺序一定一致。
有带索引的方法:可以直接通过索引得到相应数据,可以直接使用普通for循环来遍历集合。

接下来我们将结合代码来具体学习List相关知识。

二、List常用方法 List应知应会

List作为接口,它最常用的实现类是ArrayList和LinkedList,作为接口它抽取了所有实现类的共有方法,所有实现List接口的实现类均可使用这些方法。例如ArrayList和LinkedList均可使用如下共有方法。

方法名说明
void add(int index,E element)在此集合中的指定位置插入指定的元素
E remove(int index)删除指定索引处的元素,返回被删除的元素
E set(int index,E element)修改指定索引处的元素,返回被修改的元素
E get(int index)返回指定索引处的元素

2.1 调用add()方法增添数据(可指定位置添加)

具体实现类为ArrayList的List

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为ArrayListList<Integer> list=new ArrayList<>();//调用add()方法增添数据list.add(15);list.add(17);list.add(19);list.add(20);//调用add()方法向指定位置插入元素list.add(1,16);list.add(3,18);//普通输出System.out.println(list);}

运行结果:
在这里插入图片描述


具体实现类为LinkedList的List

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为LinkedListList<Integer> list=new LinkedList<>();//调用add()方法增添数据list.add(15);list.add(17);list.add(19);list.add(20);//调用add()方法向指定位置插入元素list.add(1,16);list.add(3,18);//普通输出System.out.println(list);}

运行结果:
在这里插入图片描述


2.2 调用remove()方法删除指定位置元素并返回被删除元素

接下来我们就以实现类为LinkedList的List来具体举例

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为LinkedListList<Integer> list=new LinkedList<>();//调用add()方法增添数据list.add(15);list.add(16);list.add(17);list.add(18);list.add(18);list.add(19);list.add(20);//调用remove()方法删除指定位置元素并返回被删除元素Integer remove = list.remove(3);System.out.println("被删除的元素为:"+remove);//普通输出System.out.println(list);}

运行结果:(从运行结果中我们看到调用remove()方法删除18之后,后面元素的位置会左移,这为我们未来删除数据时注意索引的位置,防止漏删
在这里插入图片描述


2.3 调用set()方法修改指定位置元素并返回初始数据

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为LinkedListList<Integer> list=new LinkedList<>();//调用add()方法增添数据list.add(15);list.add(17);list.add(19);list.add(20);//调用add()方法向指定位置插入元素list.add(1,16);list.add(3,18);//调用set()方法修改指定位置元素并返回初始数据Integer set = list.set(3, 188);System.out.println(set);}

运行结果:
在这里插入图片描述


2.4 调用get()方法返回指定位置元素

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为LinkedListList<Integer> list=new LinkedList<>();//调用add()方法增添数据list.add(15);list.add(17);list.add(19);list.add(20);//调用add()方法向指定位置插入元素list.add(1,16);list.add(3,18);//调用get()方法返回指定位置元素Integer integer = list.get(1);System.out.println(integer);}

运行结果:
在这里插入图片描述


三、List可重复特点

我们增添两个aoao和两个daidai数据

public static void main(String[] args) {//创建一个数据类型为String的List对象,并指明其实现类为LinkedListList<String> list=new LinkedList<>();//调用add()方法增添数据list.add("aoao");list.add("aoao");list.add("daidai");list.add("daidai");//调用add()方法向指定位置插入元素list.add(1,"zhangsan");list.add(3,"lisi");//普通输出System.out.println(list);}

运行结果:(我们看到重复的数据同样也会被输出
在这里插入图片描述


四、List存取顺序一致

我们存入数据的顺序是aoao,daidai,bobo,lisi,wangwu,zhangsan

public static void main(String[] args) {//创建一个数据类型为String的List对象,并指明其实现类为LinkedListList<String> list=new LinkedList<>();//调用add()方法增添数据list.add("aoao");list.add("daidai");list.add("bobo");list.add("lisi");list.add("wangwu");list.add("zhangsan");//普通输出System.out.println(list);}

运行结果:
在这里插入图片描述


五、List有带索引的方法

因为List有带索引的方法,因此可以直接通过索引得到相应数据,可以使用普通for循环,普通输出语句,forEach语句和Iterator迭代器来遍历集合。

5.1 普通输出语句输出List集合

public static void main(String[] args) {//创建一个数据类型为String的List对象,并指明其实现类为LinkedListList<String> list=new LinkedList<>();//调用add()方法增添数据list.add("aoao");list.add("daidai");list.add("bobo");list.add("lisi");list.add("wangwu");list.add("zhangsan");//普通输出System.out.println(list);}

运行结果:
在这里插入图片描述


5.2 普通for循环输出List集合

public static void main(String[] args) {//创建一个数据类型为String的List对象,并指明其实现类为LinkedListList<String> list=new LinkedList<>();//调用add()方法增添数据list.add("aoao");list.add("daidai");list.add("bobo");list.add("lisi");list.add("wangwu");list.add("zhangsan");//普通for循环输出List集合for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}}

运行结果:
在这里插入图片描述


5.3 forEach语句输出List集合

public static void main(String[] args) {//创建一个数据类型为String的List对象,并指明其实现类为LinkedListList<String> list=new LinkedList<>();//调用add()方法增添数据list.add("aoao");list.add("daidai");list.add("bobo");list.add("lisi");list.add("wangwu");list.add("zhangsan");//forEach语句输出List集合//s即为list遍历的结果,String即为list的数据类型for (String s : list) {System.out.println(s);}}

运行结果:
在这里插入图片描述


5.4 Iterator迭代器输出List集合

public static void main(String[] args) {//创建一个数据类型为String的List对象,并指明其实现类为LinkedListList<String> list=new LinkedList<>();//调用add()方法增添数据list.add("aoao");list.add("daidai");list.add("bobo");list.add("lisi");list.add("wangwu");list.add("zhangsan");//Iterator迭代器输出List集合Iterator<String> iterator=list.iterator();//iterator.hasNext()的作用即为判断当前位置是否存在元素,若存在则返回true,否则返回falsewhile(iterator.hasNext()){//iterator.next()的作用即为获取当前位置元素,并指向下一位置以便hashNext判断System.out.println(iterator.next());}}

运行结果:
在这里插入图片描述


六、List删除指定值的数据

6.1 删除指定值的数据漏删数据 常见问题

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为LinkedListList<Integer> list=new LinkedList<>();//调用add()方法增添数据list.add(15);list.add(18);list.add(18);list.add(16);list.add(17);list.add(18);list.add(19);list.add(20);list.add(18);//List删除值为18的元素for (int i = 0; i < list.size(); i++) {if(list.get(i).equals(18)){list.remove(i);}}//普通输出System.out.println(list);}

运行结果:(我们发现仍然有一个18未被删除
在这里插入图片描述

原因:当我们删除某一元素后,之前此元素之后的所有数据会左移,那么如果第二个与此元素相等的元素,于此元素并排,它就会左移至此元素的位置,而我们的指针之后会加1,因此会跳过它。文字难以理解?没关系,上图解!!!

首先我们插入集合数据元素的顺序如下:
请添加图片描述


当我们删除第一个18之后,集合变为如下图:(我们不难得出结论当我们删除List集合中的某一数据时,集合会自动缩容。被删除的元素之后的元素会发生左移,即我们删除18之后之前索引为2值为18的元素左移后,变为索引为1值为18
请添加图片描述


但是此时我们的i索引指向的是2,因此在之后的遍历中会跳过一个18,发生漏删现象

请添加图片描述


6.2 漏删数据解决办法

当我们删除一个数据后,为了防止漏删,索引i也应跟着左移,即i-1

public static void main(String[] args) {//创建一个数据类型为Integer的List对象,并指明其实现类为LinkedListList<Integer> list=new LinkedList<>();//调用add()方法增添数据list.add(15);list.add(18);list.add(18);list.add(16);list.add(17);list.add(18);list.add(19);list.add(20);list.add(18);//List删除值为18的元素for (int i = 0; i < list.size(); i++) {if(list.get(i).equals(18)){list.remove(i);//之所以i要减一,是因为当我们删除第一个18后,之前第一个18之后的所有数据会左移,那么第二个18就会左移至第一个18的位置,如果我们的i不减1,那么就会跳过第二个18而不删除它i=i-1;}}//普通输出System.out.println(list);}

运行结果:
在这里插入图片描述


OK!!!List介绍结束!!!

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

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

相关文章

SQL注入写入文件方法(获取webshell)

数据库写入文件条件 1、当前数据库用户为 root 权限2、知道当前网站的绝对路径3、secure_file_priv 的参数必须为空或目录地址4、PHP的 GPC 为 off状态&#xff1b;(魔术引号&#xff0c;GET&#xff0c;POST&#xff0c;Cookie)用 sqli-labs 测试查看当前用户权限Python sqlma…

本机连接Vmware虚拟机中win7的SQLServer数据库

在开发中&#xff0c;可能遇到不同数据库或不同版本的问题&#xff0c;为了避免在本机安装卸载造成后续无法再次安装的情况&#xff0c;我们在虚拟机中安装需要的版本进行测试。 本篇介绍如何在本机连接到虚拟机中的数据库。 解决流程如下&#xff1a; 一&#xff1a;进入虚…

学Vue3这一篇就够了!

目录学习Vue的前提是掌握 HTML,CSS,Js中级知识vue介绍声明式渲染条件与循环处理用户输入组件化应用构建Vue与自定义元素的关系应用和组件实例Vue实例根组件组件实例 property生命周期钩子实例的生命周期图模板语法插值文本原始 HTMLAttribute使用 JavaScript 表达式指令参数动态…

Linux驱动开发——字符设备

目录 Linux设备分类 字符设备驱动基础 字符设备驱动框架 虚拟串口设备 Linux设备分类 Linux系统根据驱动程序实现的模型框架将设备驱动分为下面三种。 (1)字符设备驱动:设备对数据的处理是按照字节流的形式进行的&#xff0c;可以支持随机访问&#xff0c;也可以不支持随…

抽象类,接口

抽象类&#xff1a;当父类的某些方法&#xff0c;需要声明&#xff0c;但是又不确定如何实现时&#xff0c;可以将其声明为抽象方法&#xff0c;那么这个类就是抽象类。 package com.hspedu.abstract_;public class Abstract01 {public static void main(String[] args) {} } a…

Linux 操作系统原理 — PCIe 总线标准

目录 文章目录目录总线系统PCIe 总线PCIe 总线的传输速率PCIe 总线的架构PCIe 外设PCIe 设备的枚举过程PCIe 设备的编址方式BDF&#xff08;Bus-Device-Function&#xff09;编号BAR&#xff08;Base Address Register&#xff09;地址Linux 上的 PCIe 设备查看 PCIe 设备的 BD…

算法强化--两数之和

hi,大家好,今天为大家带来一道题目,求两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一…

Python 进阶指南(编程轻松进阶):三、使用 Black 工具来格式化代码

原文&#xff1a;http://inventwithpython.com/beyond/chapter3.html 代码格式化是将一组规则应用于源代码&#xff0c;从而使得代码风格能够简洁统一。虽然代码格式对解析程序的计算机来说不重要&#xff0c;但代码格式对于可读性是至关重要的&#xff0c;这是维护代码所必需的…

【剑指offer|4.从尾到头打印单链表】

0.从尾到头打印单链表 单链表&#xff1a;一般给的都是无头节点的 另外&#xff1a;在面试中&#xff0c;如果我们打算修改输入的数据&#xff0c;则最好问一下面试官是不是允许修改 下面这种先把链表节点的值按链表序放到数组中&#xff0c;然后来一个算法库中的reverse属实有…

一文懂KL散度KL Divergence

本文翻译自https://naokishibuya.medium.com/demystifying-kl-divergence-7ebe4317ee68 KL散度中的KL全称是Kullback-Leibler&#xff0c;分别表示Solomon Kullback和Richard A.Leibler这两个人。 一、KL散度的定义 KL散度表明概率分布Q和概率分布P之间的相似性&#xff0c;由…

ARM Linux 内核启动1 —— 汇编阶段

一、Makefile分析 1、Makefile 分析 (1) kernel 的 Makefile 写法和规则等&#xff0c;和 uboot 的 Makefile 是一样的&#xff0c;甚至 Makefile 中的很多内容都是一样的。 (2) kernel 的 Makefile 比 uboot 的 Makefile 要复杂&#xff0c;这里我们并不会一行一行的详细分析…

【20】核心易中期刊推荐——计算机科学电子通信(EI索引)

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

进阶C语言:文件操作

文件操作不仅仅是我们使用鼠标用来操作文件的各项功能&#xff0c;还可以使用C语言来操作文件的内容&#xff0c;可以使用C语言来对文件的读、写、拷贝...等等&#xff0c;话不多说&#xff0c;直接开始&#xff1a; 目录 1.为什么要使用文件 2.什么是文件 2.1程序文件 2.…

蓝桥杯【第14届省赛】Python B组

本题解不一定正确&#xff0c;欢迎大家指正 A&#xff1a;2023 【问题描述】 请求出在 12345678 至 98765432 中&#xff0c;有多少个数中完全不包含 2023 。 完全不包含 2023 是指无论将这个数的哪些数位移除都不能得到 2023 。 例如 20322175&#xff0c;33220022 都完全不包…

python实现获取当前目录下的树形结构

python实现获取当前目录下的树形结构 程序实现 在有些Linux上自带了tree命令来一树状结构显示一个目录&#xff0c;但是在有些linux上没有自带这个程序&#xff0c;所以这里用python写了一个小程序来实现这个功能&#xff0c;代码如下&#xff1a; import osdef print_tree(…

共模电感(扼流圈) 差模电感(扼流圈)

共模电感 共模电感&#xff0c;也叫共模扼流圈。常用于电脑的开关电源&#xff0c;过滤共模的电磁干扰信号。 共模电感器由软磁铁芯&#xff08;铁氧体磁芯&#xff09;和两组同相绕制的线圈组成。对于共模信号&#xff0c;由于两组线圈产生的磁场不是抵消。而是相互叠加&…

存量市场之下,电商之战深入腹地且逻辑未变

纵然是在流量依然见顶的大背景下&#xff0c;电商行业的竞争并未结束。无论是以百亿补贴为代表的烧钱策略&#xff0c;还是以跨境出海为代表的规模策略&#xff0c;几乎都是这样一种现象的直接体现。种种迹象表明&#xff0c;未来的电商行业&#xff0c;依然会有新的战役发生。…

Hadoop集群环境搭建与应用回顾

文章目录一、 实训项目名称二、 学习情况小结三、 项目中用到的知识点四、 实训项目中负责功能板块五、 实训项目实现六、 实训项目过程中遇到的问题及解决方法七、实训体会与心得一、 实训项目名称 Hadoop集群环境搭建与应用 二、 学习情况小结 实操一部分&#xff1a; 通…

linux 服务器 docker 安装 nacos 2.0.3

docker 镜像 https://registry.hub.docker.com/r/nacos/nacos-server/tags 1.下载nacos镜像 这里下载的是2.0.3 docker pull nacos/nacos-server:2.0.32.查看镜像是否下载成功 如下图 docker images3.创建文件夹 注&#xff1a; 自定义创建&#xff0c;用于把docker内部的文件…

【基金学习】基金的相关计算题目

文章目录一、基金收益计算1. 累计收益/持有收益2. 年化收益/年化收益率3. 涨跌幅4. 分红二、风险计算1. 贝塔系数2. 波动率三、费用计算1. 托管费2. 管理费3. 销售服务费4. 申购/赎回费一、基金收益计算 1. 累计收益/持有收益 累计收益 持仓金额 - 本金 累计收益率 &#xf…