Queue
实现了Collection接口
boolean add(E e); //添加元素 超出上限抛出异常
boolean offer(E e); //同样添加元素 超出上限返回false
E remove(); //移除元素 为空抛出异常
E poll(); //移除元素 为空返回null
E element(); //获取元素,为空抛出异常
E peek(); //获取元素,为空返回null
未实现阻塞接口(AbstractQueue)
PriorityQueue
维护了一个有序列表,插入其中的元素要么实现了 java.util.Comparable ,要么就需要在构造函数中设置比较器
ConcurrentLinkedQueue
是基于链表的线程安全的队列,因为它在队列的尾部添加元素并从头部删除它们。而这两个变量都加上了volatile关键字
private transient volatile Node<E> head;
private transient volatile Node<E> tail;
实现阻塞接口(BlockingQueue)
线程不是立即从队列中添加或者删除元素,线程执行操作阻塞,直到有空间或者元素可用。
aad、removee和element操作在你试图为一个已满的队列增加元素或从空队列取得元素时 抛出异常
public E element() {
E x = peek();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
public boolean add(E e) {
if (offer(e))
return true;
else
throw new IllegalStateException("Queue full");
}
public E remove() {
E x = poll();
if (x != null)
return x;
else
throw new NoSuchElementException();
}
ArrayBlockingQueue
一个基于数组的有界队列:内部维护了一个count字段,当count等于size的时候就不能向里面插入数据;内部维护了一个ReentrantLock可以设置公平参数为true让等待时间长的线程优先得到处理;也是按照先入先出进行排序
LinkedBlockingQueue
一个基于链表可选有界队列;在不指定容量上限的时候是没有容量限制的,按照先入先出进行排序
PriorityBlockingQueue
一个基于优先堆的无界优先级队列
DelayQueue
一个基于优先堆的、时间调度的队列。可以支持延迟获取元素的无界阻塞队列,元素必须实现Delayed接口。创建元素时可以指定多长时间后才能从队列中获取元素。
SynchronousQueue
一个基于BlockingQueue接口的简单聚集机制;是一个内部只包含一个元素的队列。每一个写操作都会被阻塞,直到一个读操作获取元素。同样每一个读操作都会被阻塞,直到一个写操作。
双端队列(Deque)
继承Queue
void addFirst(E e); //在队头部插入元速, 失败时抛出异常
void addLast(E e); //在队尾插入元素,失败时抛出异常
boolean offerFirst(E e); //向队列头部加入一个元素,失败时返回false
boolean offerLast(E e); //向队列尾部加入一个元素,失败时返回false
E removeFirst(); //弹出队列头部元素,队列为空时抛出异常
E removeLast();
E pollFirst(); //弹出队列头部元素,队列为空时返回null
E pollLast();
E getFirst(); //获取队列头部元素,队列为空时抛出异常
E getLast();
E peekFirst(); //获取队列头部元素,队列为空时返回null
E peekLast();
boolean removeFirstOccurrence(Object o); //删除第一次出现的指定元素,不存在时返回false
boolean removeLastOccurrence(Object o);
boolean add(E e); //队列头部元素,队列为空时抛出异常
boolean offer(E e); //队列头部元素,队列为空时抛出异常
E remove(); //删除队列头部元素,队列为空时抛出异常
E poll(); //获取并删除队列头部,如果为空返回null
E element(); //获取队列头部元素,队列为空时抛出异常
E peek(); //获取队列头部元素,队列为空时返回null
void push(E e); //插入元素到队列头部,插入失败排除异常
E pop(); //弹出队列头部元素,队列为空时抛出异常
boolean remove(Object o); //删除队列第一个匹配元素,队列为空时抛出异常
boolean contains(Object o); //是否包含某元素
public int size(); //队列大小
Iterator<E> iterator(); //返回队列迭代器
Iterator<E> descendingIterator(); //返回队列反向迭代器
欢迎加入小编微信公众号