javaSE_集合与队列(queue)

 Queue

发队列(线程安全

PriorityQueue

    优先级队列,队列中的数据在插入时会排序,因此如果是自定义类需要派生Comparable通过排序实现了优先权。

ConcurrentLinkedQueue

是一个基于链接节点的无界线程安全队列

阻塞队列(线程安全

ArrayBlockingQueue

    基于数组是有界的,new时必须指定队列的大小

LinkedBlockingQueue

    基于链表,是无界的,可以不指定队列的大小,但是默认是Integer.MAX_VALUE。当然也可以指定队列大小,从而成为有界的

PriorityBlockingQueue(优先级队列

DelayQueue

延迟队列,是一个存放Delayed 元素的无界阻塞队列,只有在延迟期满时才能从中提取元素。其内部是使用PriorityQueue实现的。适用场景:

a) 关闭空闲连接。服务器中,有很多客户端的连接,空闲一段时间之后需要关闭之。
b) 缓存。缓存中的对象,超过了空闲时间,需要从缓存中移出。
c) 任务超时处理。在网络协议滑动窗口请求应答式交互时,处理超时未响应的请求。

http://www.cnblogs.com/jobs/archive/2007/04/27/730255.html

追加元素

add

超出队列长度时,抛出一个IIIegaISlabEepeplian异常

offer

超出队列长度时返回false

put

超出队列长度时阻塞

删除第一个元素

remove

队列为空时抛出一个NoSuchElementException异常

poll

队列为空时返回null

take

超出队列长度时阻塞

remove可以带一个参数,表示删除某一元素,返回bool值。

获取第一个元素,不删除

element

队列为空时抛出一个NoSuchElementException异常

peek

队列为空时返回null

ArrayBlockingQueue<Integer> nums = new ArrayBlockingQueue(5);

nums.add(6);

nums.add(7);

nums.add(8);

nums.add(4);

nums.add(5);

// nums.add(6);// 超出队列长度时,抛出一个IIIegaISlabEepeplian异常

System.out.println(nums.toString());// [6, 7, 8, 4, 5]

System.out.println(nums.remove());// 删除第一个元素,队列为空时抛出一个NoSuchElementException异常

System.out.println(nums.toString());// [7, 8, 4, 5]

System.out.println(nums.remove(8));// 删除元素8

System.out.println(nums.toString());// [7, 4, 5]

System.out.println(nums.element());// 获取第一个元素,不删除,队列为空时抛出一个NoSuchElementException异常

System.out.println(nums.toString());// [7, 4, 5]

boolean bOffer1 = nums.offer(8);

boolean bOffer2 = nums.offer(9);

boolean bOffer3 = nums.offer(10);// 添加数据,超出队列长度时返回false

System.out.println(bOffer3 + nums.toString());// false[7, 4, 5, 8, 9]

System.out.println(nums.poll());// 删除第一个元素,队列为空时返回null

System.out.println(nums.toString());// [4, 5, 8, 9]

System.out.println(nums.peek());// 返回第一个元素,队列为空时返回null

System.out.println(nums.toString());// [4, 5, 8, 9]

try {

nums.put(11);

//nums.put(12);// 添加元素,如果队列满了则阻塞

System.out.println(nums.toString());// [4, 5, 8, 9, 11]

Integer num = nums.take();// 删除第一个元素,如果队列空则阻塞

System.out.println(num);

System.out.println(nums.toString());// [5, 8, 9, 11]

} catch (InterruptedException e) {

e.printStackTrace();

}

猜你喜欢

转载自blog.csdn.net/qq_41665356/article/details/80225423