对于队列
public static List<List<String>> lists = new ArrayList<List<String>>();
public static Deque<String> deque = new LinkedList<String>();
使用队列的时候,new LinkedList的时候为什么用deque接收,不用LinkedList呢?
答:deque继承queue接口,因为它有两个实现,LinkedList与ArrayDeque。用deque接收是因为向上转型(子类往父类转,会丢失子类的特殊功能)了。
ArrayDeque一般优于链表队列/双端队列,有限数量的垃圾产生(旧数组将被丢弃在扩展),建议使用deque,ArrayDeque优先。
//从队首取出元素,不会删除
System.out.println("队首取出元素:"+deque.peek());
//从队首加入元素(队列有容量限制时用,无则用addFirst)
deque.offerFirst("c");
deque.addLast(str);
//从队尾加入元素(队列有容量限制时用,无则用addLast)
deque.offerLast("g");
//获取并移除队列第一个元素,pollFirst()也是,
deque.removeFirst();
//获取并移除队列第一个元素,此方法与pollLast 唯一区别在于队列为空时,removeLast会抛出NoSuchElementException异常,后者返回null
deque.removeLast();
//获取队列第一个元素.此方法与 peekFirst 唯一的不同在于:如果此双端队列为空,它将抛出NoSuchElementException,后者返回null
System.out.println("获取队列第一个元素为:"+deque.getFirst());
//循环获取元素并在队列移除元素
while(deque.size()>0){
System.out.println("获取元素为:"+ deque.pop()+" 并删除");
}
LinkedList 使用链表实现,可以有removeLast方法,ArrayList没有这个方法。