【从零开始学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。
相关推荐
m0_716765232 小时前
C++提高编程--STL常用容器(set/multiset、map/multimap容器)详解
java·开发语言·c++·经验分享·学习·青少年编程·visual studio
qqty12172 小时前
springboot+mybaties项目中扫描不到@mapper注解的解决方法
java·spring boot·mybatis
灵魂猎手2 小时前
14. MyBatis XML 热更新实战:告别重启烦恼
java·mybatis
程途知微2 小时前
AQS 同步器——Java 并发框架的核心底座全解析
java·后端
froginwe112 小时前
Bootstrap4 折叠组件使用指南
开发语言
sunwenjian8862 小时前
SpringBean的生命周期
java·开发语言
毕设源码-赖学姐3 小时前
【开题答辩全过程】以 基于Java的游泳馆会员管理系统的设计与实现为例,包含答辩的问题和答案
java·开发语言
侠客行03173 小时前
Tomcat 网络I/O模型浅析
java·tomcat·源码阅读
Yilena3 小时前
带你轻松学习LangChain4j
java·学习·langchain