一文带你详细了解Java的List集合

一、集合与 List 概述

在 Java 编程中,集合框架提供了一种方便、高效的方式来管理对象组。集合类位于 java.util 包下,而 List 是其中一个重要的接口,继承自 Collection 接口,它允许存储有序(元素存入顺序和取出顺序一致)、可重复的元素集合。

二、List 的常用实现类

ArrayList

  • 底层数据结构:基于动态数组实现。数组有初始容量(默认为 10),当元素数量超过容量时,会自动扩容(约 1.5 倍)。
  • 特点:随机访问效率高,通过索引访问元素时间复杂度为 ,但在中间插入或删除元素相对低效,因为需要移动后续元素,时间复杂度为 。例如:
import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> arrayList = new ArrayList<>();
        // 添加元素
        arrayList.add("Apple");
        arrayList.add("Banana");
        arrayList.add("Cherry");
        // 访问元素,索引从 0 开始
        System.out.println(arrayList.get(1)); // 输出 Banana
        // 修改元素
        arrayList.set(2, "Durian");
        // 遍历 ArrayList
        for (String fruit : arrayList) {
            System.out.println(fruit);
        }
    }
}


LinkedList

  • 底层数据结构:采用双向链表实现,每个节点包含数据、前驱指针和后继指针。
  • 特点:适合频繁在列表中间插入和删除操作,只需修改节点指针指向,时间复杂度为 ,但随机访问性能差,通过索引获取元素需从头或尾节点开始遍历链表,时间复杂度为 。示例代码:
import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        List<String> linkedList = new LinkedList<>();
        linkedList.add("Red");
        linkedList.add("Green");
        linkedList.add("Blue");
        // 在头部插入元素
        ((LinkedList<String>) linkedList).addFirst("Yellow");
        // 在尾部插入元素
        ((LinkedList<String>) linkedList).addLast("Purple");
        // 遍历 LinkedList
        for (String color : linkedList) {
            System.out.println(color);
        }
    }
}


Vector

底层数据结构:类似 ArrayList,也是基于数组实现,但它是线程安全的(方法大多用 synchronized 修饰),而 ArrayList 是非线程安全的。不过在多线程并发访问不频繁场景,因同步开销,性能不如 ArrayList。示例:

import java.util.Vector;

public class VectorExample {
    public static void main(String[] args) {
        Vector<Integer> vector = new Vector<>();
        vector.add(1);
        vector.add(2);
        vector.add(3);
        // 遍历 Vector
        for (int num : vector) {
            System.out.println(num);
        }
    }
}

三、List 的通用操作方法

添加元素

  • add(E element):在列表末尾添加指定元素,E 是元素类型。例如 list.add("newItem");
  • add(int index, E element):在指定索引位置插入元素,索引之后元素依次后移。

访问元素get(int index) 返回列表中指定索引处的元素,注意索引不能越界(小于 0 或大于等于列表大小),否则抛出 IndexOutOfBoundsException

修改元素set(int index, E element) 用指定元素替换列表指定索引位置的原有元素,并返回被替换的旧元素。

删除元素

  • remove(int index):移除列表指定索引处的元素,后续元素前移,返回被移除的元素。
  • remove(Object o):从列表中移除指定对象首次出现的位置(若存在),若列表不存在该对象则不操作,返回是否移除成功的布尔值。

查找元素indexOf(Object o) 返回指定对象在列表中首次出现的索引,若不存在返回 -1;lastIndexOf(Object o) 则返回最后一次出现的索引,同样不存在返回 -1。

获取列表大小size() 返回列表中当前元素个数。

四、List 的遍历方式

普通 for 循环遍历:利用索引按顺序访问元素,适合在需要按索引操作、修改元素场景,如:

List<String> list = new ArrayList<>();
// 添加元素操作略
for (int i = 0; i < list.size(); i++) {
    System.out.println(list.get(i));
}


增强 for 循环(foreach)遍历:简洁遍历元素,不能修改元素本身(修改只是副本),示例:

for (String item : list) {
    System.out.println(item);
}


迭代器遍历(Iterator):通过迭代器对象 Iterator,可安全地在遍历同时删除元素,代码如下:

import java.util.Iterator;
import java.util.List;
// 假设已有 List<String> list 实例化并添加元素
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    if (element.equals("target")) {
        iterator.remove();
    }
}

掌握 Java 集合 List 的这些知识,能在处理有序、可重复元素集合场景高效编写代码,灵活应对数据存储与操作需求。后续可深入研究各实现类底层源码优化、性能瓶颈突破及与其他集合类型转换协作等进阶内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

攀哥聊AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值