Java 数据结构之Deque的几种实现

本文介绍了Java中两种Deque的实现:ArrayDeque和ConcurrentLinkedDeque。ArrayDeque是非线程安全且高效的数据结构,适合单线程环境。ConcurrentLinkedDeque是线程安全的并发Deque,适用于多线程共享访问。同时,文章讨论了并发修改下的迭代器行为和线程安全问题。
摘要由CSDN通过智能技术生成

1、ArrayDeque

Deque接口的一种可改变大小的实现,数组deque没有容量限制,可以根据需要增加容量。是非线程安全的;如果没有外同步,它不支持多线程的并发访问。不允许元素为null,该类用作栈或队列时,比Stack和LinkedList都要快。ArrayDeque的大多数操作需要分摊的常量时间复杂度(amortezed constant time),例外的有remove、removeFirstOccurrence、removeLastOccurrence、contains和iterator.remove()方法,以及批量操作,所有这些都是只需要线性时间复杂度(linear time)。

迭代器的返回通过使用iterator方法是快速失败的(fast-fail) ,即如果创建iterator后,deque在任何时间被除了迭代器自己的remove方法修改了,iterator通常会抛出ConcurrentModificationException异常。因此,对于并发修改,迭代器会快速干净地失败,而不会产生任何危害,当未来在不确定的时间发生不确定性的行为。注意,迭代器的fail-fast行为并不能硬性地保证任何非同步的并发修改时都会发生,fail-fast在最大努力的基础上抛出ConcurrentModificationException异常。因此,如果程序依赖于作为判断正确与否的依据是不正确的,fail-fast只能用作检测错误。

该类和其迭代器实现了Collection接口和Iterator接口的所有可选方法。


2、ConcurrentLinkedListDeque

一种基于链表的无边界的并发Deque。并发插入、移除和访

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值