Queue

新元素插入到队列的尾部,访问元素操做会返回队列头部的元素,一般队列不容许随机访问队列中的元素数组

Queue接口定义的几个方法:性能

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

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

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

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

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

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

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

Deque表明双端队列,能够同时两端添加删除元素,既能够当队列使用,也能够当栈使用。有两个实现类:ArrayDeque,LinkedListget

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也是以数组形式存储,但实现了线程同步,因此各方面性能都差

相关文章
相关标签/搜索