新元素插入到队列的尾部,访问元素操做会返回队列头部的元素,一般队列不容许随机访问队列中的元素数组
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也是以数组形式存储,但实现了线程同步,因此各方面性能都差