“探索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学习之旅就到这里了

相关推荐
zhangfeng113329 分钟前
openclaw skills 小龙虾技能 通讯仿真 matlab skill Simulink Agentic Toolkit,通过kimi找到,mcp通讯
开发语言·matlab·openclaw·通讯仿真
Javatutouhouduan7 小时前
2026Java面试的正确打开方式!
java·高并发·java面试·java面试题·后端开发·java编程·java八股文
chao1898447 小时前
基于 SPEA2 的多目标优化算法 MATLAB 实现
开发语言·算法·matlab
JAVA面经实录9177 小时前
Java初级最终完整版学习路线图
java·spring·eclipse·maven
赏金术士7 小时前
Kotlin 习题集 · 高级篇
android·开发语言·kotlin
Cat_Rocky8 小时前
k8s-持久化存储,粗浅学习
java·学习·kubernetes
楼兰公子8 小时前
buildroot 在编译rust时裁剪平台类型数量的方法
开发语言·后端·rust
知识领航员9 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
吴声子夜歌9 小时前
Go——并发编程
开发语言·后端·golang
释怀°Believe9 小时前
Spring解析
java·后端·spring