Java各种List实现类以及特点

目录

[1. ArrayList](#1. ArrayList)

[2. LinkedList](#2. LinkedList)

[3. Vector](#3. Vector)

[4. Stack](#4. Stack)

[5. CopyOnWriteArrayList](#5. CopyOnWriteArrayList)


1. ArrayList

  • 特性 :
    • 基于动态数组实现。
    • 提供快速的随机访问能力。
    • 在列表末尾添加/删除元素非常快,但在列表中间插入/删除元素可能需要移动元素,较慢。
    • 每次自动增长时,数组大小增加50%。

2. LinkedList

  • 特性 :
    • 基于双向链表实现。
    • 优于ArrayList在列表中间的插入和删除操作。
    • 提供了额外的方法和接口,如Deque,可以作为队列、双端队列或栈使用。
    • 随机访问速度慢,因为需要从头或尾部遍历链表。

3. Vector

  • 特性 :
    • 类似于ArrayList,但所有方法都是同步的,是线程安全的。
    • 因为线程同步,通常比ArrayList慢。
    • 每次自动增长时,数组大小增加一倍,或者增加指定的大小。

4. Stack

  • 特性 :
    • 继承自Vector,实现了一个后进先出(LIFO)的堆栈。
    • 提供了基本的堆栈操作:push、pop、peek等。
    • 由于是Vector的子类,因此它也是线程安全的。
    • Java官方推荐使用Deque接口和其实现(如ArrayDeque)来创建和操作堆栈。

5. CopyOnWriteArrayList

  • 特性 :
    • 线程安全的List实现,基于最终一致性的原理。
    • 在写操作时,如add、set、remove,会复制整个底层数组。
    • 适用于读多写少的并发场景。
    • 迭代器不支持修改操作,如remove、set和add。

总结

Java中的List接口有多种实现,每种实现都有其特定的特性和用途。ArrayList和Vector提供了基于数组的列表,其中Vector是线程安全的。LinkedList提供了基于链表的操作,适合频繁的插入和删除操作。Stack是Vector的一个子类,提供了堆栈的操作,但现在通常推荐使用Deque接口的实现。CopyOnWriteArrayList是一种线程安全的List实现,适用于读多写少的并发场景。根据应用程序的需求,比如对线程安全、随机访问速度、插入和删除操作的性能等因素,可以选择合适的List实现。

相关推荐
郝学胜-神的一滴7 分钟前
深入理解Linux套接字(Socket)编程:从原理到实践
linux·服务器·开发语言·网络·c++·程序人生·算法
向前V10 分钟前
Flutter for OpenHarmony轻量级开源记事本App实战:笔记编辑器
开发语言·笔记·python·flutter·游戏·开源·编辑器
时艰.15 分钟前
JVM — Java 类加载机制
java·开发语言·jvm
小小码农Come on34 分钟前
QT中窗口位置、相对位置、绝对位置
android·开发语言·qt
diediedei36 分钟前
C++中的适配器模式变体
开发语言·c++·算法
郝学胜-神的一滴1 小时前
Python中的Mixin继承:灵活组合功能的强大模式
开发语言·python·程序人生
叫我:松哥1 小时前
基于python强化学习的自主迷宫求解,集成迷宫生成、智能体训练、模型评估等
开发语言·人工智能·python·机器学习·pygame
晚霞的不甘1 小时前
Flutter for OpenHarmony 创意实战:打造一款炫酷的“太空舱”倒计时应用
开发语言·前端·flutter·正则表达式·前端框架·postman
哪里不会点哪里.1 小时前
Spring MVC 核心原理解析:从请求到响应到底发生了什么?
java·spring·mvc
WKP94181 小时前
线程并行控制CompletableFuture
java·开发语言