Queue
先入先出(FIFO)的数据结构
继承关系
1、ArrayBlockingQueue
方法对比
方法名 | 作用 | 结果 |
---|---|---|
add | 增加一个元素 | 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 |
remove | 移除并返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
element | 返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
offer | 添加一个元素并返回true | 如果队列已满,则返回false |
poll | 移除并返问队列头部的元素 | 如果队列为空,则返回null |
peek | 返回队列头部的元素 | 如果队列为空,则返回null |
put | 添加一个元素 | 如果队列满,则阻塞 |
take | 移除并返回队列头部的元素 | 如果队列为空,则阻塞 |
案例
public static void main(String[] args) throws InterruptedException {
Queue queue = new ArrayBlockingQueue<>(3);
System.out.println(queue.add("tom"));
System.out.println(queue.add("jack"));
System.out.println(queue.add("jimi"));
//超过元素个数报异常
// System.out.println(queue.add("lingke"));
System.out.println("queue.element():" + queue.element());
System.out.println("queue.remove():" + queue.remove());
System.out.println("queue.remove():" + queue.remove());
System.out.println("queue.remove():" + queue.remove());
//超过元素个数报异常
// System.out.println(queue.remove());
BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(blockingQueue.offer("a"));
System.out.println(blockingQueue.offer("b"));
System.out.println(blockingQueue.offer("c"));
//超过元素个数返回false
System.out.println(blockingQueue.offer("d"));
System.out.println("blockingQueue.peek():" + blockingQueue.peek());
System.out.println("blockingQueue.poll():" + blockingQueue.poll());
System.out.println("blockingQueue.poll():" + blockingQueue.poll());
System.out.println("blockingQueue.poll():" + blockingQueue.poll());
//超过元素个数返返回null
System.out.println("blockingQueue.poll():" + blockingQueue.poll());
BlockingQueue<String> blockingQueue2 = new ArrayBlockingQueue<>(3);
blockingQueue2.put("a");
blockingQueue2.put("b");
blockingQueue2.put("c");
//超过元素个数阻塞
// blockingQueue2.put("d");
System.out.println(blockingQueue2.take());
System.out.println(blockingQueue2.take());
System.out.println(blockingQueue2.take());
//超过元素个数阻塞
System.out.println(blockingQueue2.take());
}