浅析Stack,ArrayDeque,LinkedList的区别

本文详细对比了Java中的Stack、ArrayDeque和LinkedList三种数据结构,它们都可作为栈使用。Stack基于Vector实现,线程安全但效率较低;ArrayDeque以数组实现,非线程安全但性能高效;LinkedList则通过链表实现,适合频繁的插入和删除操作。在选择使用时,根据具体需求如线程安全、插入删除频率和随机访问频率来决定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

类继承树

由继承树看出,三者都是Collection的间接实现类。
       ArrayDeque实现Deque接口,Stack继承于Vector,LinkedList实现Deque与List接口。

 区别

底层数据存储方式

数据存储方式
存储方式
stack长度为10的数组
ArrayDeque长度为16的数组
LinkedListl链表

方法参照表

方法对照表
StackArrayDequeLinkedList
push(e)addFirst(e)/offerFirst(e)addFirst(e)/offerFirst(e)
pop()remove()/removeFirst()/pollFirst()removeFirst()/pollFirst()
peek()getFirst()/peekFirst()getFirst()/peekFirst()

双端队列的常用方法

  • addFirst(E):void 在队头添加元素。
  • addLast(E):void 在队尾添加元素。
  • add(E):void 在队尾添加元素。
  • offerFirst(E):boolean 在队头添加元素,并返回是否添加成功。
  • offerLast(E):boolean 在队尾添加元素,并返回是否添加成功。
  • offer(E):boolean 在队尾添加元素,并返回是否添加成功。
  • removeFirst():E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
  • remove():E 删除队头元素,并返回删除的元素,如果队列为null,抛出异常。
  • removeLast():E 删除队尾元素,并返回删除的元素,如果队列为null,抛出异常。
  • pollFirst():E 删除队头元素,并返回删除的元素,如果队列为null,返回null。
  • pollLast():E 删除队尾元素,并返回删除的元素,如果队列为null,返回null。
  • getFirst():E 获取队头元素,如果队列为null,抛出异常。
  • getLast():E 获取队尾元素,如果队列为空,抛出异常。
  • peekFirst():E 获取队头元素,如果队列为null,返回null。
  • peeLast():E 获取队尾元素,如果队列为null,返回null。

双端队列简图:

线程安全

线程安全
线程安全
stack线程同步
ArrayDeque线程不同步
LinkedList线程不同步

性能选项

通常情况下,不推荐使用Vector以及其子类Stack

  1. 需要线程同步       
    1. 使用Collections工具类中synchronizedXxx()将线程不同步的ArrayDeque以及LinkedList转换成线程同步。
  2. 频繁的插入、删除操作:LinkedList
  3. 频繁的随机访问操作ArrayDeque
  4. 未知的初始数据量:LinkedList
     

转载出处:

Stack,ArrayDeque,LinkedList的区别_cartoon23333的博客-优快云博客_arraydeque linkedlist       这段时间把疯狂JAVA再看了一遍,发现Stack,ArrayDeque,LinkedList都可以作为栈使用,所以就稍微从性能以及实现的细节对比这三者的区别。类继承树       由继承树看出,三者都是Collection的间接实现类。&https://blog.youkuaiyun.com/cartoon_/article/details/87992743

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值