“探索Java List的无限可能:从基础到高级应用“

今天将带领大家进入Java---list的学习,跟随我的脚步进入list之旅.


我的个人主页

1. 什么是List

2. List常见接口介绍

3. List的使用

一:什么是List ?

在集合框架中,List是一个接口,继承自Collection。

Collection也是一个接口,该接口中规范了后序容器中常用的一些方法,具体如下所示

Iterable也是一个接口,表示实现该接口的类是可以逐个元素进行遍历的,具体如下:

List就是一个线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删
改查以及变量等操作。
------list的官方文档

二: List常见接口介绍:
List接口是java.util包中的一个重要接口,用于表示一个有序的集合。List接口继承自Collection接口,并添加了一些用于操作列表元素的方法。

三:l i s t 的使用
注意:List是个接口,并不能直接用来实例化。

如果要使用,必须去实例化List的实现类。在集合框架中,ArrayList和LinkedList都实现了List接口。
常见的List实现类

ArrayList 基于动态数组的实现,允许快速随机访问,但在列表的开头和中间插入或删除元素时性能较差(因为需要移动元素)。

线程不安全,如果需要线程安全,可以使用Collections.synchronizedList(new ArrayList<>())。

LinkedList 基于双向链表的实现,允许在列表的开头和中间快速插入和删除元素,但随机访问性能较差(因为需要从头节点开始遍历)。

提供了addFirst(E e)和addLast(E e)等方法,用于在列表的开头和末尾添加元素。线程不安全,如果需要线程安全,可以使Collections.synchronizedList(new LinkedList<>())。

Vector 类似于ArrayList,但它是线程安全的(方法被synchronized修饰)。

由于线程安全带来的开销,性能通常比ArrayList差。

在多线程环境中,Vector通常被CopyOnWriteArrayList替代,因为后者在迭代时性能更好。

CopyOnWriteArrayList 一个线程安全的变体,适用于读多写少的场景。 在每次修改时,都会创建底层数组的一个副本,因此读操作是无锁的,性能较高。 写操作(如添加、删除、修改)开销较大,因为需要复制整个数组。

Stack 继承自Vector,实现了后进先出(LIFO)的栈结构。 提供了push(E item)、pop()、peek()等方法,用于操作栈顶元素。 由于继承自Vector,因此也是线程安全的。

选择合适的List实现
ArrayList:适用于需要快速随机访问元素的场景,且插入和删除操作主要在列表的末尾进行。
**LinkedList:**适用于需要频繁在列表的开头和中间进行插入和删除操作的场景。
**Vector:**在需要线程安全的旧代码中使用,但在现代Java开发中,通常被CopyOnWriteArrayList或其他并发集合替代。
**CopyOnWriteArrayList:**适用于读多写少的并发场景。
**Stack:**适用于需要栈结构的场景,但通常不推荐使用Stack类,因为它继承自Vector,性能较差,且功能可以通过Deque接口及其实现类(如ArrayDeque)更好地实现。
要创建一个List,你需要使用它的一个实现类。例如,使用ArrayList:

java 复制代码
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // 创建一个ArrayList实例
        List<String> list = new ArrayList<>();

        // 向列表中添加元素
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        // 访问列表中的元素
        System.out.println("第一个元素: " + list.get(0));
        System.out.println("第二个元素: " + list.get(1));

        // 遍历列表
        for (String fruit : list) {
            System.out.println(fruit);
        }

        // 列表的大小
        System.out.println("列表的大小: " + list.size());

        // 检查列表中是否包含某个元素
        System.out.println("列表是否包含Banana? " + list.contains("Banana"));

        // 移除列表中的元素
        list.remove("Banana");

        // 再次遍历列表
        System.out.println("移除Banana后的列表:");
        for (String fruit : list) {
            System.out.println(fruit);
        }
    }
}

常用的List方法

add(E e): 将指定的元素添加到列表的末尾。

get(int index): 返回列表中指定位置的元素。

size():返回列表中的元素数量。

contains(Object o): 如果列表包含指定的元素,则返回true。

remove(Object o): 移除列表中首次出现的指定元素(如果存在)。

isEmpty(): 如果列表不包含元素,则返回true。

clear():移除列表中的所有元素。

今天的list学习之旅就到这里了

相关推荐
掘金-我是哪吒12 分钟前
分布式微服务系统架构第157集:JavaPlus技术文档平台日更-Java多线程编程技巧
java·分布式·微服务·云原生·架构
飞翔的佩奇20 分钟前
Java项目:基于SSM框架实现的忘忧小区物业管理系统【ssm+B/S架构+源码+数据库+毕业论文+开题报告】
java·数据库·mysql·vue·毕业设计·ssm框架·小区物业管理系统
阿蒙Amon21 分钟前
C#扩展方法全解析:给现有类型插上翅膀的魔法
开发语言·c#
RainbowSea38 分钟前
跨域问题(Allow CORS)解决(3 种方法)
java·spring boot·后端
掘金-我是哪吒39 分钟前
分布式微服务系统架构第155集:JavaPlus技术文档平台日更-Java线程池实现原理
java·分布式·微服务·云原生·架构
RainbowSea42 分钟前
问题 1:MyBatis-plus-3.5.9 的分页功能修复
java·spring boot·mybatis
尘浮7281 小时前
60天python训练计划----day59
开发语言·python
前端 贾公子1 小时前
monorepo + Turborepo --- 开发应用程序
java·前端·javascript
Chef_Chen1 小时前
从0开始学习R语言--Day39--Spearman 秩相关
开发语言·学习·r语言
不学会Ⅳ1 小时前
Mac M芯片搭建jdk源码环境(jdk24)
java·开发语言·macos