ArrayDeque和LinkedList和PriorityQueue区别
底层实现
ArrayDeque基于 循环数组 实现
LinkedList基于 双向链表 实现
PriorityQueue基于 最小堆(完全二叉树) 实现
接口实现
ArrayDeque和LinkedList都实现了Serializable和Cloneable接口,支持序列化和克隆操作
PriorityQueue只实现了Serializable接口,支持序列化操作
时间复杂度(以队列看)
1.ArrayDeque:
add时间复杂度:O(n)
remove时间复杂度:O(n)
get时间复杂度:O(1)
2.LinkedList:
add时间复杂度:O(1)
remove时间复杂度:O(1)
get时间复杂度:O(n)
3.PriorityQueue:
get时间复杂度:O(log(N))
add/offer时间复杂度:O(log(N))
remove/poll时间复杂度:O(log(N))
特点
ArrayDeque:双端队列,线程不安全,性能高于LinkedList,不允许插入null元素
LinkedList:双端队列,线程不安全,首尾元素操作效率高,低效随机访问
PriorityQueue:线程不安全,不允许插入null元素,动态数组实现最小堆,remove方法一直返回最小元素