Queue

新元素插入到队列的尾部,访问元素操作会返回队列头部的元素,通常队列不允许随机访问队列中的元素

Queue接口定义的几个方法:

  void add(obj):将指定元素加入队列尾部

  Object element():获取头元素,但不删除

  boolean offer(obj):将指定元素加入队列尾部,当使用有容量限制的队列时,此方法表现的比add要好

  Object peek():获取头元素,但不删除该元素,队列为空则返回null

  Object poll():获取头元素并删除,如果队列为空泽返回null

  Object remove():获取队列头部元素,并删除该元素

Queue接口有一个PriorityQueue实现类和一个Deque接口

Deque代表双端队列,可以同时两端添加删除元素,既可以当队列使用,也可以当栈使用。有两个实现类:ArrayDeque,LinkedList

PriorityQueue类:

  是一个比较标准的队列实现类,说比较标准是因为PriorityQueue保存队列元素的顺序不是按照加入队列的顺序,而是按照队列元素的大小进行重新排序,因此当调用peek或者poll方法取出队列中元素时,不是最先进入的元素,而是最小的元素,这里违反了先进先出规则,大小比较受到PriorityQueue的toString方法影响。不允许插入null

  有两种排序方式:

    自然排序:集合元素必须实现了Comparable接口

    定制排序:创建PriorityQueue队列时,传入一个Comparator对象

  对元素的要求与TreeSet基本一致

Deque接口:

  代表双端队列,包含下面方法:

    void addFirst(obj):指定元素插入开头

    void addLast(obj):插入结尾

    Iterator descendingIterator():返回双端队列对应迭代器,该迭代器逆向顺序迭代队列中的元素

    Object getFirst():获取但不删除第一个

    Object getLast():获取但不删除最后一个

    boolean offerFirst(obj):插入开头

    boolean offerLast(obj):插入末尾

    Object peekFirst():获取但不删除第一个元素,如果队列为空则null

    Object peekLast():获取但不删除最后一个元素,如果队列为空则null

    Object pollFirst():获取并删除第一个元素,如果队列为空则null

    Object pollLast():获取并删除最后一个元素,如果队列为空则null

    Object pop():(栈方法)pop出栈顶元素,相当于removeFirst

    void push(obj):(栈方法)push到栈顶,相当于addFirst

    Object removeFirst():获取并删除双端队列第一个元素

    boolean removeFirstOccurrence(obj):删除双端队列第一次出现的元素

    Object removeLast():获取并删除双端队列最后一个元素

    boolean removeLastOccurrence(obj):删除该双端队列最后一次出现的元素

ArrayDeque实现类:

  是Deque的实现类,基于数组实现的双端队列

  创建Deque同样可以指定一个numElements参数,用于指定Object[]数组的长度,不指定则Deque底层数组长度为16

  用栈用ArrayDeque,避免用Stack,也可以当做队列使用:ArrayDeque stack = new ArrayDeque()

  ArrayList和ArrayDeque实现机制基本相同,底层都采用一个动态的,可分配的Object[]数组来存储集合,超出容量则重新分配一个数组

LinkedList实现类:

  是List接口的实现类,也实现了Deque接口,因此可以当做双端队列使用,可以当做队列使用。也可以当做栈使用

  LinkedList与ArrayList和ArrayDeque实现机制完全不同,后两者以数组形式保存集合中的元素,因此随机访问具有很好的性能,当LinkedList以链表形式,随机访问性能较差,插入删除出色

  Vector也是以数组形式存储,但实现了线程同步,所以各方面性能都差

 

    

posted on 2017-06-15 21:20  zawjdbb  阅读(170)  评论(0编辑  收藏  举报

导航