Java中List集合使用详细介绍

 更新时间:2026年06月16日 09:03:31   作者:MandalaO_O  
Java是一门强大的编程语言,拥有丰富的数据结构和集合类,其中之一就是List列表,List是Java集合框架中的一个重要接口,它允许我们以有序、可重复的方式存储一组元素,这篇文章主要介绍了Java中List集合使用的相关资料,需要的朋友可以参考下

一、List 集合概述

List 是 Java 集合框架中 有序、可重复 的接口,继承自 Collection,允许通过索引访问元素。其核心实现类包括 ArrayListLinkedList 和 Vector,各有不同的底层结构和适用场景。

二、核心实现类详解

1. ArrayList

  • 底层结构:动态数组(Object[]),支持自动扩容。

  • 核心特性

    • 访问效率:按索引访问快(时间复杂度 O(1)),适合随机访问。
    • 增删效率:尾部增删快(O(1)),中间增删慢(需移动元素,O(n))。
    • 线程安全:非线程安全,多线程环境需手动同步(如 Collections.synchronizedList())。
    • 内存占用:较低(仅存储数据,无额外指针开销)。
  • 常用方法

    ArrayList<String> list = new ArrayList<>();
    list.add("元素"); // 尾部添加
    list.add(1, "插入元素"); // 指定索引插入
    list.set(0, "替换元素"); // 替换指定索引元素
    list.get(0); // 获取索引元素
    list.remove(0); // 按索引删除
    list.remove("元素"); // 按值删除
    list.contains("元素"); // 判断是否包含
    list.size(); // 获取元素数量
    list.clear(); // 清空集合
  • 遍历方式

    • 普通 for 循环(适合随机访问);
    • 增强 for 循环(简洁);
    • forEach 方法(Lambda 表达式)。
  • 适用场景:大量读操作、随机访问频繁,元素增删较少的场景(如数据展示、查询结果存储)。

2. LinkedList

  • 底层结构:双向链表,每个节点存储数据及前后节点引用。

  • 核心特性

    • 访问效率:按索引访问慢(需遍历链表,O(n)),不适合随机访问。
    • 增删效率:首尾增删快(O(1)),中间增删只需修改指针(O(n),主要耗时在遍历定位)。
    • 线程安全:非线程安全。
    • 内存占用:较高(需额外存储前后节点指针)。
  • 特有方法(实现 Deque 接口,支持队列 / 栈操作):

    LinkedList&lt;String&gt; list = new LinkedList&lt;&gt;();
    list.addFirst("首元素"); // 头部添加
    list.addLast("尾元素"); // 尾部添加
    list.getFirst(); // 获取首元素(空表抛异常)
    list.getLast(); // 获取尾元素(空表抛异常)
    list.peekFirst(); // 安全获取首元素(空表返回 null)
    list.peekLast(); // 安全获取尾元素(空表返回 null)
    list.removeFirst(); // 删除首元素(空表抛异常)
    list.removeLast(); // 删除尾元素(空表抛异常)
    list.pollFirst(); // 安全删除首元素(空表返回 null)
    
  • 遍历方式

    • 增强 for 循环(推荐);
    • 迭代器 Iterator(支持边遍历边删除,避免并发异常);
    • 逆序迭代器 descendingIterator()(从尾到头遍历)。
  • 适用场景:频繁在首尾或中间位置增删元素的场景(如队列、栈、链表结构模拟)。

3. Vector(不推荐新项目使用)

  • 底层结构:动态数组(Object[]),早期线程安全实现。

  • 核心特性

    • 线程安全:所有方法用 synchronized 修饰,保证多线程安全,但性能较低。
    • 扩容机制:默认初始容量 10,满容后扩容为原容量的 2 倍(ArrayList 为 1.5 倍)。
    • 功能:与 ArrayList 类似,但方法加锁导致单线程性能差。
  • 常用方法:与 ArrayList 基本一致,额外支持 Enumeration 遍历(遗留接口)。

  • 适用场景:需线程安全的多线程场景(现多被 ArrayList + Collections.synchronizedList() 或 CopyOnWriteArrayList 替代)。

三、三大实现类对比表

特性ArrayListLinkedListVector
底层结构动态数组双向链表动态数组
随机访问效率快(O(1)慢(O(n)快(O(1)
中间增删效率慢(O(n)较快(O(n),定位耗时)慢(O(n)
首尾增删效率快(O(1)快(O(1)快(O(1)
线程安全是(方法加锁)
内存占用高(节点指针)
适用场景大量读操作、随机访问频繁增删(首尾 / 中间)多线程安全需求(少用)

四、使用建议

  • 单线程场景

    • 以查询为主、少量增删 → 优先 ArrayList(性能最优)。
    • 频繁增删(尤其是中间位置) → 选择 LinkedList
  • 多线程场景

    • 需线程安全 → 用 Collections.synchronizedList(new ArrayList<>()) 或 CopyOnWriteArrayList(并发包,读多写少时高效),避免使用 Vector(性能差)。
  • 遍历注意

    • ArrayList 适合普通 for 循环(索引访问快);
    • LinkedList 适合增强 for 或迭代器(避免索引遍历的性能损耗);
    • 遍历时删除元素需用 Iterator.remove(),避免 ConcurrentModificationException

到此这篇关于Java中List集合使用详细介绍的文章就介绍到这了,更多相关Java List集合内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文搞懂Java中的序列化与反序列化

    一文搞懂Java中的序列化与反序列化

    序列化是将对象转换成二进制字节流的过程;反序列化是从二进制字节流中恢复对象的过程。文中降通过示例详解二者的使用与区别,需要的可以参考一下
    2022-08-08
  • java组件fileupload文件上传demo

    java组件fileupload文件上传demo

    这篇文章主要为大家详细介绍了java组件fileupload文件上传demo ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • JAVA 实现二叉树(链式存储结构)

    JAVA 实现二叉树(链式存储结构)

    本篇文章主要介绍用JAVA 实现二叉树,并提供实例.对二叉树数据结构很好的学习实践,有需要的朋友可以参考下
    2016-07-07
  • 详解Java类加载器与双亲委派机制

    详解Java类加载器与双亲委派机制

    这篇文章主要为大家介绍一下Java中的类加载器与双亲委派机制,文中通过示例为大家进行了详细的介绍,对我们学习Java有一定帮助,需要的可以参考一下
    2022-08-08
  • SpringBoot利用注解来实现Redis分布式锁

    SpringBoot利用注解来实现Redis分布式锁

    有些业务请求,属于耗时操作,需要加锁,防止后续的并发操作,同时对数据库的数据进行操作,需要避免对之前的业务造成影响。本文将利用注解来实现Redis分布式锁,需要的可以参考一下
    2022-09-09
  • java语言如何生成plist下载ipa文件

    java语言如何生成plist下载ipa文件

    这篇文章主要介绍了java语言如何生成plist下载ipa文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • mybatis 字段名自动转小写的实现

    mybatis 字段名自动转小写的实现

    这篇文章主要介绍了mybatis 字段名自动转小写的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03
  • 使用Java的方式模拟Flutter的Widget实现多层括号嵌套

    使用Java的方式模拟Flutter的Widget实现多层括号嵌套

    这篇文章主要介绍了使用Java的方式模拟Flutter的Widget的实现多层括号嵌套问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • java 使用poi动态导出的操作

    java 使用poi动态导出的操作

    这篇文章主要介绍了java 使用poi动态导出的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java开发神器Lombok使用详解

    Java开发神器Lombok使用详解

    这篇文章主要介绍了Java开发神器Lombok使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11

最新评论