java-单列集合List详解

news2024/12/25 12:25:02

一、List概述

​​​​​​​List 接口继承自 Collection 接口。这意味着所有 List 类型的对象都是 Collection 类型的对象,它们共享 Collection 接口中定义的所有方法。

List集合的特点:

1、有序:存和取得元素顺序一致

2、有索引:可以通过索引操作元素

3、可重复:存储的元素可以重复

二、List的方法

Collection接口的方法List都继承了,在此基础上List还增加了索引操作的方法

List独有的方法:

它的特有方法都与索引有关

1、增加元素

语法1:集合名称.add(元素);

在集合的末尾添加元素

语法2:集合名称.add(索引,元素);    特有方法

在指定索引添加元素原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素

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

public class test1 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        // 通用方法
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        System.out.println(l);// [aaa, bbb, ccc]
        // 特有方法
        // 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素
        l.add(1,"在索引1处添加元素");
        System.out.println(l);// [aaa, 在索引1处添加元素, bbb, ccc]
    }
}

2、删除元素

语法1:集合名称.remove(元素);

根据元素删除,如果存在则删除成功,返回值为true,如果不存在则删除失败,返回值为false

语法2:集合名称.remove(索引,元素);    特有方法

在指定索引删除元素,返回值为删除的元素

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

public class test1 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        // 通用方法
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        System.out.println(l);// [aaa, bbb, ccc]
        // 特有方法
        // 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素
        l.add(1,"qqq");
        System.out.println(l);// [aaa, qqq, bbb, ccc]

        // 3.删除元素
        // 通用方法
        // 集合未存在java 删除失败 返回false
        boolean r1=l.remove("java");
        System.out.println(r1);// false
        System.out.println(l);// [aaa, qqq, bbb, ccc]
        // 集合存在qqq 删除成功 返回true
        boolean r2=l.remove("qqq");
        System.out.println(r2);// true
        System.out.println(l);// [aaa , bbb, ccc]

        // 特有方法
        // 在指定索引处删除元素
        String r3=l.remove(2);
        System.out.println(r3);// ccc
        System.out.println(l);// [aaa , bbb]
    }
}

3、修改元素

语法:集合名称.set(索引,元素);特有方法

修改指定索引的元素,返回值为修改前的元素

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

public class test1 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        // 通用方法
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        System.out.println(l);// [aaa, bbb, ccc]
        // 特有方法
        // 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素
        l.add(1,"qqq");
        System.out.println(l);// [aaa, qqq, bbb, ccc]

        // 3.修改元素
        // 修改指定索引的元素 返回修改前的元素
        String r1=l.set(1, "kkk");
        System.out.println(r1);// qqq
        System.out.println(l);// [aaa, kkk, bbb, ccc]
    }
}

4、获取元素

语法:集合名称.set(索引);特有方法

返回值为该索引对应的元素

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

public class test1 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        // 通用方法
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");
        System.out.println(l);// [aaa, bbb, ccc]
        // 特有方法
        // 在指定索引处添加元素 原索引及其之后的元素都会向后移动一位 而不是覆盖该索引处的元素
        l.add(1,"qqq");
        System.out.println(l);// [aaa, qqq, bbb, ccc]

        // 3.获取元素
        // 返回值为该索引对应的元素
        String r1=l.get(1);
        System.out.println(r1);// qqq
    }
}

5、注意点

因为出现了方法的重载,在调用方法时,会优先调用形参类型与实参类型一致的方法

三、List的遍历方式

List的遍历方式不仅继承Collection接口的遍历方式,还有自己特有的根据索引遍历的方式,它的遍历方式共5种,包括迭代器遍历、增强for遍历、lamdba表达式遍历、普通for循环(特有 因为List集合存在索引)、列表迭代器遍历(特有),其中迭代器遍历、增强for遍历、lamdba表达式遍历是继承Collection接口的遍历方式,用法完全一致

详情可以参考以下文章:http://t.csdnimg.cn/zTdXHicon-default.png?t=N7T8http://t.csdnimg.cn/zTdXH

1、迭代器遍历

语法:

Iterator<集合元素类型>迭代器名称=集合名称.Iterator();

while(迭代器对象名称.hasnext()){

        System.out.println(迭代器对象名称.next());

}

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

public class 迭代器遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.遍历集合
        // 通过iterator方法创建迭代器对象
        Iterator<String> it=l.iterator();
        // hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回false
        while (it.hasNext()){
            // next()是用来返回当前位置元素 并指向下一位置的元素
            String s=it.next();
            System.out.println(s);
        }
        // aaa
        // bbb
        // ccc
    }
}

2、列表迭代器遍历(特有)

列表迭代器遍历与迭代器遍历的方法很相似,不同的是列表迭代器遍历不仅可以在遍历的时候删除元素,还可以在遍历的时候添加元素

语法:(仅仅遍历)

ListIterator<集合元素类型>迭代器名称=集合名称.ListIterator();

while(迭代器对象名称.hasnext()){

        System.out.println(迭代器对象名称.next());

}

补充知识:

ListIterator与Iterator的关系: ListIterator接口则是一个专门为List设计的迭代器接口 它扩展了Iterator接口,并添加了一些针对List集合特有的方法

ListIterator与List的关系: ListIterator是专门为List设计的一个迭代器的接口 List含有获取ListIterator迭代器的方法 即listIterator()

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class 列表迭代器遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.列表迭代器遍历
        // 通过listIterator方法生成列表迭代器
         /*
            ListIterator与Iterator的关系:
            ListIterator接口则是一个专门为List设计的迭代器接口
            它扩展了Iterator接口,并添加了一些针对List集合特有的方法
            ListIterator与List的关系:
            ListIterator是专门为List设计的一个迭代器的接口
            List含有获取ListIterator迭代器的方法 即listIterator()
          */
        ListIterator<String> it=l.listIterator();
        // hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回false
        while (it.hasNext()){
            // next()是用来返回当前位置元素 并指向下一位置的元素
            String s=it.next();
            System.out.println(s);
        }
        //aaa
        //bbb
        //ccc
    }
}

语法:(遍历中增加元素)

it.add(元素);

注意:ListIteratoradd()方法的作用是在当前迭代器位置之前插入一个元素

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class 列表迭代器遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.列表迭代器遍历
        // 通过listIterator方法生成列表迭代器
         /*
            ListIterator与Iterator的关系:
            ListIterator接口则是一个专门为List设计的迭代器接口
            它扩展了Iterator接口,并添加了一些针对List集合特有的方法
            ListIterator与List的关系:
            ListIterator是专门为List设计的一个迭代器的接口
            List含有获取ListIterator迭代器的方法 即listIterator()
          */
        ListIterator<String> it=l.listIterator();
        // hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回false
        while (it.hasNext()){
            // next()是用来返回当前位置元素 并指向下一位置的元素
            String s=it.next();
            if(s.equals("bbb")){
                it.add("qqq");
            }
            System.out.println(s);
        }
        /*
                第一次遍历时指针指向aaa 调用it.next(); 将aaa赋值给s 并将指针指向下一位置bbb
                然后判断s是否为bbb 此时s不是bbb 因此it.add("qqq");没有执行  输出aaa
                第二次遍历时指针指向bbb 调用it.next(); 将bbb赋值给s 并输出bbb 并将指针指向下一位置ccc
                然后判断s是否为bbb 此时s是bbb 因此it.add("qqq");执行 并输出bbb
                ListIterator的add()方法的作用是在当前迭代器位置之前插入一个元素。
                所以在ccc前添加qqq 
                将ccc赋值给s 此时s不是bbb 因此it.add("qqq");不执行 并将指针指向下一位置(没有元素) 循环结束
                整个过程qqq没有输出
        */
        //aaa
        //bbb
        //ccc
        System.out.println(l);// [aaa, bbb, qqq, ccc]
    }
}
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class 列表迭代器遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.列表迭代器遍历
        // 通过listIterator方法生成列表迭代器
         /*
            ListIterator与Iterator的关系:
            ListIterator接口则是一个专门为List设计的迭代器接口
            它扩展了Iterator接口,并添加了一些针对List集合特有的方法
            ListIterator与List的关系:
            ListIterator是专门为List设计的一个迭代器的接口
            List含有获取ListIterator迭代器的方法 即listIterator()
          */
        ListIterator<String> it=l.listIterator();
        // hasNext()判断该位置是否存在元素 若存在则返回true 不存在则返回false
        while (it.hasNext()){
            // next()是用来返回当前位置元素 并指向下一位置的元素
            it.add("qqq");
            String s=it.next();
             /*
                ListIterator的add()方法的作用是在当前迭代器位置之前插入一个元素。
                第一次遍历时指针指向aaa 调用it.add("qqq"); 会在aaa前添加qqq
                然后调用it.next()输出aaa 并将指针指向下一位置bbb 因此qqq不会输出
                第二次遍历时指针指向bbb 调用it.add("qqq"); 会在bbb前添加qqq
                然后调用it.next()输出bbb 并将指针指向下一位置ccc 因此qqq不会输出
                第三次遍历时指针指向aaa 调用it.add("qqq"); 会在ccc前添加qqq
                然后调用it.next()输出aaa 并将指针指向下一位置(没有元素) 因此qqq不会输出
                循环结束
             */
            System.out.println(s);
        }
        //aaa
        //bbb
        //ccc
        System.out.println(l);// [qqq, aaa, qqq, bbb, qqq, ccc]
    }
}

3、增强for遍历

快速生成增强for遍历:集合名称.for+回车

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

public class 增强for遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.遍历集合
        // 增强for遍历
        // 快速生成增强for遍历:集合名称.for+回车
        // s是用来存储遍历的元素
        for (String s : l) {
            System.out.println(s);
        }
        // aaa
        // bbb
        // ccc
    }
}

4、lamdba表达式遍历

forEach方法的底层其实是一个循环遍历  依次得到集合中的每一个元素

并将每一个元素传递给accept方法(其中String s中,s就是传入的元素)

 accept方法就是将传入的元素输出

最后利用lamdba表达式进行简化

import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;

public class lamaba表达式遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.lamdba表达式遍历
        // forEach方法的底层其实是一个循环遍历 依次得到集合中的每一个元素
        // 并将每一个元素传递给accept方法(其中String s,s就是传入的元素)
        // accept方法就是将传入的元素输出
        // 简化前:
        l.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        // aaa
        // bbb
        // ccc

        // 简化后:
        l.forEach(s->System.out.println(s));
        // aaa
        // bbb
        // ccc
    }
}

5、普通for循环(特有 因为List集合存在索引)

语法:       

for (int i = 0; i < l.size(); i++) {
            System.out.println(l.get(i));
  }

通过get和size方法结合,遍历集合的元素

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

public class 普通for遍历 {
    public static void main(String[] args) {
        // 1.创建集合
        List<String> l=new ArrayList<>();

        // 2.添加元素
        l.add("aaa");
        l.add("bbb");
        l.add("ccc");

        // 3.普通for遍历元素
        // 通过集合名称.size().fori快速生成for循环
        // l.size()获取集合的长度
        // l.get(i)获取索引为i的元素值
        for (int i = 0; i < l.size(); i++) {
            System.out.println(l.get(i));
        }
        //aaa
        //bbb
        //ccc
    }
}

6、五种遍历方式的对比

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

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

相关文章

在一台笔记本电脑上试用Ubuntu22.04

在一台笔记本电脑上试用Ubuntu22.04。 本来想看以下该操作系统能否识别笔记本电脑上的硬盘&#xff0c;于是下载试一下。选了一个国内镜像网站下载。下载速度很快。下载以后用软件win image 将下载的iso文件写到U盘上&#xff0c;用的是usb2.0的U盘&#xff0c;该操作用时11分…

Oracle之SQL plus的一些经验心得

每次登入SQL plus后,不知道时哪个用户登入,非常不方便,只能使用show user查看。 以下时可以通过一些设置实现上述的效果,知道时哪个用户登入,和实现输出效果等 1)SQL plus使用细则 SQL plus登录时,我们可以设置一些通用的设置,在每次登入SQL plus的时候生效。 [root@c…

macbook spotlightknowledged 占用 cpu 过高

参考 https://discussions.apple.com/thread/251221314?sortBybesthttps://blog.csdn.net/tree_legend/article/details/136580949

图搜索算法详解

图搜索算法详解 图搜索算法是一种常用的算法技术&#xff0c;广泛应用于计算机科学、人工智能、数据挖掘、网络优化等领域。它的主要目的是在图结构中寻找从起点到终点的最优路径&#xff0c;使得搜索过程更加高效、准确。图搜索算法有多种&#xff0c;包括广度优先搜索、深度优…

MKS 质量MFC流量控制器原理及应用课件PPT

MKS 质量MFC流量控制器原理及应用课件PPT

2、关于数据库事务那些事

目录 1、什么是事务&#xff1f; 2、介绍下数据库事务&#xff1f; 3、并发事务会带来什么问题&#xff1f; 3.1、不可重复读和幻读有什么区别&#xff1f; 4、数据库隔离级别有哪几种&#xff1f; 5、MySQL默认使用隔离级别是啥&#xff1f; 6、如何控制并发事务&#…

TCP 协议特性

1. TCP 基本认识 TCP 是面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接&#xff1a;一定是「一对一」才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多是无法做到的&#xff1b; 可靠的&#xff1a;无论的网络链…

论文笔记:Time-LLM: Time Series Forecasting by Reprogramming Large Language Models

iclr 2024 reviewer 评分 3888 1 方法 提出了 Time-LLM&#xff0c; 是一个通用的大模型重编程&#xff08;LLM Reprogramming&#xff09;框架将 LLM 轻松用于一般时间序列预测&#xff0c;而无需对大语言模型本身做任何训练 为什么需要时序数据和文本数据对齐&#xff1a;时…

【信号处理】基于CNN的心电(ECG)信号分类典型方法实现(tensorflow)

关于 本实验使用1维卷积神经网络实现心电信号的5分类。由于数据类别不均衡&#xff0c;这里使用典型的上采样方法&#xff0c;实现数据类别的均衡化处理。 工具 方法实现 数据加载 Read the CSV file datasets: NORMAL_LABEL0 , ABNORMAL_LABEL1,2,3,4,5 ptbdb_abnormalpd.…

C语言练习——上三角矩阵

前言 今天我们来看看如何使用代码实现上三角矩阵吧。首先我们来了解一下上上三角矩阵是什么&#xff0c;上三角矩阵就是在矩阵从左上到右下的对角线之下的数组元素都为0的数组方矩阵&#xff0c;例如&#xff1a; 以一个三阶矩阵为例&#xff0c;在对角线元素之下&#xff0c;就…

江西智博环境| 邀您参加2024全国水科技大会暨技术装备成果展览会

展位号&#xff1a;A28 企业介绍 江西智博环境技术有限公司始创于2008年初&#xff0c;总部位于江西省域副中心城市-赣州。公司主要从事一体化净水设备、单村供站、泵船、无负压供水设备自动化控制系统、低配电系统、工艺设备及智慧水务的设计研发、生产、销售、安装、调试等业…

基于深度学习的脑部肿瘤检测系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 当大脑中形成异常细胞时&#xff0c;就会发生脑肿瘤。肿瘤主要有两种类型&#xff1a;癌性&#xff08;恶性&#xff09;肿瘤和良性肿瘤。恶性肿瘤可分为原发性肿瘤和继发性肿瘤&#xff0c;前者始…

Redis中的慢查询日志(一)

慢查询日志 概述 Redis的慢查询日志功能用于记录执行时间超过给定时长的命令请求&#xff0c;用户可以通过这个功能产生的日志来 监视和优化查询速度。服务器配置有两个和慢查询日志相关的选项: 1.slowlog-log-slower-than选项指定执行时间超过多少微妙(1秒1000 000微妙)的命…

The C programming language (second edition,KR) exercise(CHAPTER 4)

E x c e r c i s e 4 − 1 Excercise\quad 4-1 Excercise4−1&#xff1a; #include <stdlib.h> #include <stdio.h> #include <string.h> int strindex(char s[],char t[]); int strrindex(char s[],char t[]);int main(void) {char s[100]"qwoulddf…

【Linux驱动层】iTOP-RK3568学习之路(四):杂项设备驱动框架

一、杂项设备驱动简介 在 Linux 中&#xff0c;把无法归类的五花八门的设备定义成杂项设备。相较于字符设备&#xff0c;杂项设备有以下两个优点: (1)节省主设备号:杂项设备的主设备号固定为 10&#xff0c;而字符设备不管是动态分配还是静态分配设备号&#xff0c;都会消耗一…

AlDente Pro for mac最新激活版:电池长续航软件

AlDente Pro是一款专为Mac用户设计的电池管理工具&#xff0c;旨在提供电池安全和健康管理的一站式解决方案。它具备实时监控电池状态的功能&#xff0c;让用户随时了解电池的电量、充电次数、健康状态等信息。 AlDente Pro for mac最新激活版下载 同时&#xff0c;AlDente Pro…

【蓝桥杯2025备赛】集合求和

集合求和 题目描述 给定一个集合 s s s&#xff08;集合元素数量 ≤ 30 \le 30 ≤30&#xff09;&#xff0c;求出此集合所有子集元素之和。 输入格式 集合中的元素&#xff08;元素 ≤ 1000 \le 1000 ≤1000&#xff09; 输出格式 s s s 所有子集元素之和。 样例 #1 …

Docker搭建项目管理软件禅道

文章目录 一、简介二、部署三、使用 一、简介 禅道是以项目管理为核心的协作平台&#xff0c;旨在帮助团队高效地进行项目管理和协作。 禅道提供了项目管理、任务管理、团队协作、文档管理、报告统计等功能。 禅道官网 二、部署 操作系统&#xff1a;22.04.4 创建文件夹 …

ARM与单片机有啥区别?

初学者必知&#xff1a;ARM与单片机到底有啥区别&#xff1f;1、软件方面这应该是最大的区别了。引入了操作系统。为什么引入操作系统&#xff1f;有什么好处嘛&#xff1f; 在开始前我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「ARM的资料从专业入门到高级教…

【OpenHarmony-NDK技术】简单将cJson移植到OpenHarmony中,并在c层修改参数值再返回json

1、cJson的简单介绍 cJson - github网址 概述 一般使用cJson是&#xff0c;需要将json文本转化为json对象–编码&#xff0c;将json对象转化为json文本–解析。 git clone https://github.com/DaveGamble/cJSON.git 后留意cJSON.h和cJSON.h两个文件。 1、cJson的介绍 cJso…