【Java】中的List集合

目录

一、什么是List集合

List集合是最常用的一种数据结构之一。它具有动态扩容、元素添加、删除和查询等基础操作,可以存储各种类型的对象,并且支持泛型。在本文中,我将介绍Java List集合的常用方法,并通过实例演示这些方法的使用。

List接口是继承Collection接口,所以Collection集合中有的方法,List集合也继承过来

  1. List: 有序(放入的先后的次序), 放进集合中的对象可以重复。
  2. 主要特征:其元素以线性方式存储,集合中允许存放重复对象
  3. ArrayList: 代表长度可变的数组。允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢;

二、List的常用方法

List的初始化

java 复制代码
// 使用ArrayList类创建List对象
List<String> list1 = new ArrayList<>();
 
// 使用LinkedList类创建List对象
List<String> list2 = new LinkedList<>();
 
// 创建不可变List对象
List<String> list3 = Arrays.asList("a", "b", "c");
 
// 使用Collections类创建只读List对象
List<String> list4 = Collections.unmodifiableList(Arrays.asList("a", "b", "c"));

使用了ArrayList和LinkedList两个类来创建可变的List对象,它们分别代表基于数组 和链表的List实现。另外,我们还可以使用Arrays.asList()方法和Collections.unmodifiableList()方法创建不可变的List对象,其中,前者返回一个基于数组的List对象,后者返回一个只读的List对象。

元素操作

1.添加元素

向List集合中添加元素,我们可以使用add()方法、addAll()方法和ListIterator的add()方法。这些方法分别具有以下特点:

  • add()方法:将指定元素添加到List的末尾;
  • addAll()方法:将指定集合中的所有元素添加到List的末尾;
  • ListIterator的add()方法:将指定元素插入到ListIterator当前位置。

void add(value)

ListIterator的add()方法:将指定元素插入到ListIterator当前位置。

java 复制代码
 List<String> list1 = new ArrayList<>();
list1.add("1");
list1.add("list");
System.out.println(list1);

结果:

1, list

add(int index, E element)

在指定位置插入元素,后面的元素都往后移一个元素。

java 复制代码
list1.add(1,"xiaoming");
System.out.println(list1);

结果:

1, xiaoming, list

addAll()方法 :

将指定集合中的所有元素添加到List的末尾;

java 复制代码
List<String> list1 = new ArrayList<>();

        list1.add("1");
        list1.add("list");
        list1.add(1,"xiaoming");
        
        List<String> subList = Arrays.asList("c", "d");
        list1.addAll(subList);
        System.out.println(list1);

结果:

1, xiaoming, list, c, d

ListIterator的add()方法 :

将指定元素插入到ListIterator当前位置。

java 复制代码
ListIterator<String> listIterator = list1.listIterator();
        while (listIterator.hasNext()) {
            String s = listIterator.next();
            if (s.equals("b")) {
                listIterator.add("e");

            }
        }
        System.out.println(list1);

结果:

2.删除元素

从List集合中删除元素,我们可以使用remove()方法、removeAll()方法、retainAll()方法和ListIterator的remove()方法。这些方法分别具有以下特点:

  • remove()方法:删除List中第一个出现的指定元素;
  • removeAll()方法:删除List中包含在指定集合中的所有元素;
  • retainAll()方法:仅保留List中包含在指定集合中的元素;
  • ListIterator的remove()方法:删除ListIterator上一次调用next()或previous()方法返回的元素。

remove()

java 复制代码
list1.remove("xiaoming");
 System.out.println("删除之后的结果"+list1);

1, xiaoming, list, b, e, c, d

删除之后的结果1, list, b, e, c, d

removeAll()

java 复制代码
list1.removeAll(list1);
System.out.println(list1);

retainAll()方法:保留数组里面之前有过的数据

java 复制代码
List<String> subList2 = Arrays.asList("123");
        list1.retainAll(subList2);
        System.out.println(list1);

1, xiaoming, list, b, e, 123, c, d

123

ListIterator的remove()方法

java 复制代码
ListIterator<String> listIterator = list1.listIterator();
while (listIterator.hasNext()) {
    String s = listIterator.next();
    if (s.equals("d")) {
        listIterator.remove();
    }
}

3.修改元素

修改List集合中的元素,我们可以直接通过set()方法来实现。该方法会将指定位置上的元素替换为指定的新元素。

java 复制代码
list1.set(1,"2");
System.out.println(list1);

1, 2, e, 123, c, d

4.查询元素

查询List集合中的元素,我们可以通过get()方法和indexOf()方法来实现。前者返回List指定位置上的元素,后者返回第一次出现指定元素的索引位置。

java 复制代码
// 使用get()方法获取元素
String s = list1.get(0);
 
// 使用indexOf()方法查找元素  获取元素所在位置
int index = list1.indexOf("a");

三、List集合的遍历

1.for循环遍历

最基本的遍历方式就是使用for循环来遍历List集合中的元素。这种方式非常简单和直接,但是需要注意遍历时的索引范围。

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

2.增强for循环

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

3.迭代器遍历

除了以上两种方式之外,我们还可以使用迭代器来遍历List集合中的元素。迭代器遍历方式比较灵活,可以在遍历过程中修改List中的元素,也可以删除元素。

java 复制代码
Iterator<String> iterator = list1.iterator();
        while (iterator.hasNext()) {
            String s = iterator.next();
            // do something
            System.out.println(s);
        }

希望这篇文章能对大家有所帮助,谢谢大家!!!

相关推荐
青少儿编程课堂10 小时前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:Bellman-Ford与SPFA含负权最短路及负环检测全解析
c++·python·算法·bfs·信息学竞赛
叼烟扛炮10 小时前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain
小小张说故事10 小时前
Python 的 __init__ 到底是不是构造函数?拆开 __new__ 先造对象、那次被跳过的初始化和必须返回 None 的规矩
python
文丑颜不良啊10 小时前
LeetCode2061~2080题目解析
java·leetcode
拖累斯10 小时前
Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」
python·jenkins·bug
特立独行的猫A10 小时前
13MB 单文件、一条命令变服务:把仓颉写的 cjh 内嵌进你的应用,当它的 AI 大脑
java·后端·python
Brookty11 小时前
Java博客项目实战|工程环境与构建:工程目录、PowerShell命令调用与JDK/IDEA/Maven工作机制
java·项目实战
deepseek2311 小时前
Agent任务中途断线,怎么避免重复执行?SQLite检查点实测
python·sqlite·任务调度·幂等性·ai agent
养军博客11 小时前
Spring Boot 3.x + Spring Security 6.x 整合 JWT 实战:jjwt 与 java-jwt 两种工具库详解
java·spring boot·springsecurity
TeamDev11 小时前
使用 JxBrowser 在桌面应用中集成 Spring
java·前端·后端·spring·混合应用·jxbrowser·浏览器控件