Symmetric Tree 之 ArrayDeque,LinkedList 使用区别
本人写代码,无论是用到栈结构,队列结构,都习惯用deque,因为deque支持在头部和尾部插入或删除元素。
但deque有 ArrayDeque 和 LinkedList 两种框架。
主要区别在于LinkedList支持插入null元素
这在下面这道leetcode题Symmetric Tree得以运用。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public boolean isSymmetric(TreeNode root) { Deque<TreeNode> queue = new LinkedList<>();//允许插入null queue.addLast(root); queue.addLast(root); while(!queue.isEmpty()){ TreeNode t1 = queue.removeFirst(); TreeNode t2 = queue.removeFirst(); if(t1 == null && t2 == null) continue; if(t1 == null || t2 == null) return false; if(t1.val != t2.val) return false; queue.addLast(t1.left);//可能为null queue.addLast(t2.right); queue.addLast(t1.right); queue.addLast(t2.left); } return true; } }
ArrayDeque基于 循环数组 实现
LinkedList基于 双向链表 实现
PriorityQueue基于 最小堆(完全二叉树) 实现
ArrayDeque:双端队列,线程不安全,性能高于LinkedList,不允许插入null元素
LinkedList:双端队列,线程不安全,首尾元素操作效率高,低效随机访问
PriorityQueue:线程不安全,不允许插入null元素,动态数组实现最小堆,remove方法一直返回最小元素