夜雨聆风学习资料网

ARTICLE · 1215344

ArrayDeque 源码深度剖析:比 LinkedList

ArrayDeque 源码深度剖析:比 LinkedList

ArrayDeque 源码深度剖析:比 LinkedList

刷 LeetCode 时,很多人习惯用 LinkedList 当队列。其实换成 ArrayDeque,性能能提不少。

它底层是个循环数组,容量永远是 2 的幂。这样取模能用位运算搞定,比普通求余快得多。扩容翻倍后,还会把元素重排得整整齐齐,特别照顾 CPU 缓存。

当栈用时,它比老旧的 Stack 快三到五倍。因为 Stack 带着锁,而它没有同步开销。不过它也有脾气:绝对不允许存 null,也不是线程安全的。

另外它的迭代器不会快速失败。遍历时结构被改了,它不抛异常,但可能读到不一致的数据。而且内存是翻倍涨的,存五千个元素可能占八千多个槽位。

所以只要不用在中间增删、不存 null、不跨线程,它就比链表更省心。

原文ArrayDeque 源码深度剖析:比 LinkedList 更快的双端队列
收录于jdk源码
广东,1小时前,

相关学习资料