Bootstrap

deque的使用

对于队列

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没有这个方法。
 

;