【从零开始学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。
相关推荐
在繁华处1 小时前
Java从零到熟练(九):并发编程基础
java·开发语言
木头程序员1 小时前
SSM框架学习笔记
java·开发语言·mysql·spring·maven
李白你好1 小时前
页面资产梳理 · 技术指纹识别 · Spring 端点探测
java·后端·spring
一起逃去看海吧1 小时前
dify-03
java·linux·开发语言
我是一颗柠檬1 小时前
【Java后端技术亮点】热Key探测与本地缓存二级防护:Redis热点问题的终极解决方案
java·redis·后端·缓存·中间件
Refrain_zc2 小时前
Android 音视频通话核心 —— 音频编码(AAC)完整解析
java
xiaoshuaishuai82 小时前
C# AvaloniaUI 资源找不到报错
java·服务器·前端·windows·c#
Xin_ye100862 小时前
C# 零基础到精通教程 - 第十八章:部署与发布——让应用上线
开发语言·c#
我是唐青枫3 小时前
Java JdbcTemplate 实战指南:用 Spring 轻量完成数据库增删改查
java·数据库·spring
思麟呀3 小时前
C++11并发编程:call_once一次性执行+atomic原子类型+CAS无锁编程+自旋锁
linux·开发语言·jvm·c++·windows