一、LinkedList

LinkedList类是双向列表(底层使用链表结构),列表中的每个节点都包含了对前一个和后一个元素的引用。

1.1特性

  1. LinkedList是双向链表实现的List
  2. LinkedList是非线程安全的
  3. LinkedList元素允许为null,允许重复元素
  4. LinkedList是基于链表实现的,因此插入删除效率高,查找效率低(虽然有一个加速动作)LinkedList是基于链表实现的,因此不存在容量不足的问题,所以没有扩容的方法
  5. LinkedList还实现了栈和队列的操作方法,因此也可以作为栈、队列和双端队列来使用

1.2、方法

offer方法:内部调用offerLast插入元素,返回插入结果true/false
add方法:  内部调用addLast实现
poll方法:  内部调用pollFirst实现
remove方法:内部调用removeFirst实现
peek方法:内部调用peekFirst实现
element方法:内部调用getFirst实现


栈方法:

pop方法:  内部调用removeFirst实现
push方法:内部调用addFirst实现

二、ArrayDeque

ArrayDeque是双端队列的线性实现 (底层使用数组结构)

2.1、特性

  1. 无容量大小限制,容量按需增长;
  2. 非线程安全队列,无同步策略,不支持多线程安全访问;
  3. 当用作栈时,性能优于Stack,当用于队列时,性能优于LinkedList
  4. 两端都可以操作
  5. 具有fail-fast特征
  6. 不能存储null
  7. 支持双向迭代器遍历

2.2、方法

队列方法:

offer方法:内部调用offerLast插入元素,返回插入结果true/false
add方法:  内部调用addLast实现
poll方法:  内部调用pollFirst实现
remove方法:内部调用removeFirst实现
peek方法:内部调用peekFirst实现
element方法:内部调用getFirst实现


栈方法:

pop方法:  内部调用removeFirst实现
push方法:内部调用addFirst实现

三、PriorityQueue

3.1、PriorityQueue是非线程安全的

Java提供了PriorityBlockingQueue(实现BlockingQueue接口)用于Java多线程环境。

3.2、PriorityQueue天生是小顶堆,那么如果我要大顶堆怎么办?

// 默认实现了一个最小堆。 
Queue<Integer> priorityQueue = new PriorityQueue<>(); 
// 实现最大堆 
Queue<ListNode> priorityQueue = new PriorityQueue<ListNode>(
    lists.size(),
    new Comparator<ListNode>(){ 
        @Override 
        public int compare(ListNode o1, ListNode o2) { return o2.val-o1.val; } 
    }
);

参考文章

ArrayDeque详解_MrCoderr的博客

Java 中的 LinkedList - 知乎

力扣刷题常用数据结构和方法(java版本)