【从零开始学Java | 第二十二篇】List集合

目录

前言

一、List集合的三大特点

二、List集合的特有方法

[1.add(int index, E element)](#1.add(int index, E element))

[2.remove(int index)](#2.remove(int index))

[3.set(int index, E element)](#3.set(int index, E element))

[4.get(int index)](#4.get(int index))

三、List集合的遍历方式

1.迭代器遍历

2.增强for遍历

3.Lambda表达式遍历

4.普通for循环遍历

5.列表迭代器遍历

五种遍历方式对比


前言

在之前学习了集合整体的体系结构之后,这篇文章就来详细的介绍一下Collection系列集合当中的单列集合------List集合

一、List集合的三大特点

作为Collection的子类,List接口不仅继承了父类的所有方法(比如add、remove等),还拥有自己的三大特性

  1. 有序:存进去是 1、2、3,取出来绝对是 1、2、3。绝不乱序。
  2. 有索引:就像普通数组一样,每个元素都有自己的索引号。
  3. 可重复:允许存入两个甚至多个一模一样的元素,只要索引不同就行。

二、List集合的特有方法

List集合因为有索引,所以多了很多索引操作的方法。

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

1.add(int index, E element)

在此集合中的指定位置插入指定的元素

细节:原来索引上的元素会依次往后移动

代码演示:

java 复制代码
public class ListTest01 {
    public static void main(String[] args) {
        List<String> ls = new ArrayList<>();
        ls.add("aaa");
        ls.add("bbb");
        ls.add("ccc");
        ls.add("ddd");

        ls.add(1,"QQQ");
        System.out.println(ls);

    }
}

运行结果:

2.remove(int index)

删除指定索引处的元素费,返回被删除的元素

细节:该remove(int index)方法要与remove(object o)区别开来。

代码演示:

java 复制代码
public class ListTest01 {
    public static void main(String[] args) {
        List<String> ls = new ArrayList<>();
        ls.add("aaa");
        ls.add("bbb");
        ls.add("ccc");
        ls.add("ddd");

        String str = ls.remove(1);
        System.out.println(str);
        System.out.println(ls);

    }
}

运行结果:

问题来了,如果我的这个List里装的是Integer类型,那么当我调用remove方法时,会优先使用哪个remove方法呢?

接下来看一个代码演示:

答案是,如果出现了方法的重载,会优先调用实参和形参类型一致的那个方法。如果想要调用remove(Object o)这个方法,需要手动装箱。

java 复制代码
Integer i = Integer.valueOf(1);
li.remove(i);

3.set(int index, E element)

修改指定索引处的元素,返回被修改的元素。

代码演示:

java 复制代码
public class ListTest01 {
    public static void main(String[] args) {
        List<String> ls = new ArrayList<>();
        ls.add("aaa");
        ls.add("bbb");
        ls.add("ccc");
        ls.add("ddd");
        String result = ls.set(0, "QQQ");

        System.out.println(result);
        System.out.println(ls);

    }
}

运行结果:

4.get(int index)

返回指定索引处的元素。

代码演示:

java 复制代码
public class ListTest01 {
    public static void main(String[] args) {
        List<String> ls = new ArrayList<>();
        ls.add("aaa");
        ls.add("bbb");
        ls.add("ccc");
        ls.add("ddd");
        String s = ls.get(2);
        System.out.println(s);
    }
}

运行结果:

三、List集合的遍历方式

  • 迭代器遍历
  • 增强for遍历
  • Lambda表达式遍历
  • 列表迭代器遍历
  • 普通for循环遍历

我们先创建一个集合:

java 复制代码
        List<String> li = new ArrayList<>();
        li.add("刘备");
        li.add("关羽");
        li.add("赵云");
        li.add("张飞");
        li.add("黄忠");

1.迭代器遍历

java 复制代码
        Iterator<String> it = li.iterator();
        while(it.hasNext()){
            String str = it.next();
            System.out.println(str);
        }

2.增强for遍历

java 复制代码
        for (String s : li) {
            System.out.println(s);
        }

3.Lambda表达式遍历

java 复制代码
        li.forEach((String s) ->System.out.println(s));

4.普通for循环遍历

java 复制代码
        for (int i = 0; i < li.size(); i++) {
            String str = li.get(i);
            System.out.println(str);
        }

5.列表迭代器遍历

java 复制代码
        ListIterator<String> lit = li.listIterator();
        while(lit.hasNext()){
            String s = lit.next();
            System.out.println(s);
        }

但是,相比于迭代器,它多了一个添加add的方法。

运行结果:

五种遍历方式对比

  • 迭代器遍历:在遍历过程中需要删除元素,请使用迭代器。
  • 列表迭代器:在遍历过程中需要添加元素,请使用列表迭代器。
  • 增强for、Lambda表达式:仅需要遍历,那么就使用这两种。
  • 普通for:如果遍历的时候想要操作索引,可以用普通for。
相关推荐
阿巴斯甜8 分钟前
Java中 Consumer 的用法:
java
穗余10 分钟前
Rust——println!后面的感叹号什么意思【宏】
开发语言·python·rust
原来是猿13 分钟前
QT初识【创建项目+对象树】
开发语言·qt
做个文艺程序员21 分钟前
Spring Boot 封装 OpenClAW 服务层最佳实践【OpenClAW + Spring Boot 系列 第2篇】
java·人工智能·spring boot·开源
长安第一美人22 分钟前
算能 BM1688 低延迟推流:Qt+WebSocket 直出 H5/HDMI
开发语言·网络·嵌入式硬件·websocket·交互
lhbian30 分钟前
C++、C与易语言:编程语言对比解析
c语言·开发语言·c++
꧁细听勿语情꧂31 分钟前
数据结构概念和算法、时间复杂度、空间复杂度引入
c语言·开发语言·数据结构·算法
说实话起个名字真难啊32 分钟前
2026数字中国创新大赛数字安全赛道writeup之web题目一
java·前端·安全
后端AI实验室32 分钟前
我用AI把一个外包需求从30天压到5天交付,然后客户说:下次还找你
java·ai
biubiubiu070641 分钟前
ChatModel 与 ChatClient 关系完整指南
java