Java知识点总结(Java容器-Queue)

发布时间:2019-11-17 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Java知识点总结(Java容器-Queue)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Java知识点总结(Java容器-Queue)

@(Java知识点总结)[Java, Java容器]

Queue

Queue接口与List、Set是在同一级别,都是继承了Collection接口。LinkedList接口实现了Queue接口。Queue接口收缩了对LinkedList的方法访问权限(也就是方法参数如果是Queue,那就只能方法Queue接口定义的方法),让方法能够正确的使用。

队列

队列是一种数据结构,它有两个基本操作:在队列尾部添加一个元素,和在队列头部移除一个元素。也就是说,队列以一种先进先出(FIFO)的方式操作数据。
队列,它主要分为两大类,一类是阻塞式队列,队列满了以后再插入元素则会抛出异常,主要包括ArrayBlockQueue、PRiorITyBlockingQueue、LinkedBlockingQueue。另一种队列则是双端队列,支持在头、尾两端插入和移除元素,主要包括:ArrayDeque、LinkedBlockingDeque、LinkedList。

队列方法

方法 功能 异常处理
add 增加一个元索 如果队列已满,则抛出一个IIIegaiSlabEePEplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素 如果队列为空,则阻塞
  • 抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出IllegalStateException(“Queue full”)异常。当队列为空时,从队列里获取元素时会抛出NoSuchElementException异常 。
  • 返回特殊值:插入方法会返回是否成功,成功则返回true。移除方法,则是从队列里拿出一个元素,如果没有则返回null
  • 一直阻塞:当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应* 中断退出。当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。
  • 超时退出:当阻塞队列满时,队列会阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。

阻塞队列

ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列。
LinkedBlockingQueue :一个由链表结构组成的有界阻塞队列。
PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列。
DelayQueue:一个使用优先级队列实现的无界阻塞队列。
SynchronousQueue:一个不存储元素的阻塞队列。
LinkedtransferQueue:一个由链表结构组成的无界阻塞队列。
LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。

非阻塞队列

ConcurrentLinkedQueue :基于链接节点的无界线程安全队列

Queue的使用

/**  * 队列测试:实现类使用LinkedList  *   * Queue也有很多其他的实现类,比如java.util.concurrent.LinkedBlockingQueue。  * LinkedBlockingQueue是一个阻塞的线程安全的队列,底层实现也是使用链式结构。  */ public class TestQuene {      // 定义一个队列     Queue<String> queue;      @Before     public void before() {         // 实例化队列变量         queue = new LinkedList<String>();          // add方法向队列中添加元素,返回布尔值,add方法添加失败时会抛异常,不推荐使用         // queue.add("1");         // queue.add("2");         // queue.add("3");         // queue.add("4");         // queue.add("5");          // offer方法向队列中添加元素,返回布尔值         queue.offer("a");         queue.offer("b");         queue.offer("c");         queue.offer("d");         queue.offer("e");      }      // poll方法移除队列首个元素并返回,若队列为空,返回null     @Test     public void test1() {         // 弹出元素         String pollEle = queue.poll(); // 先进先出,弹出了a         System.out.println(pollEle); // a         System.out.println(queue); // [b, c, d, e]     }      // remove方法移除首个元素并返回,若队列为空,会抛出异常:NoSuchElementException,不推荐使用     @Test     public void test2() {         // 弹出元素         String remove = queue.remove(); // 先进先出,弹出了a         System.out.println(remove); // a         System.out.println(queue); // [b, c, d, e]     }      // peek方法返回队列首个元素,但不移除,若队列为空,返回null     @Test     public void test3() {         // 查看首个元素         String peek = queue.peek(); // 首个元素是a,最先加入         System.out.println(peek); // a         System.out.println(queue); // [a, b, c, d, e]     }      // element方法返回队列的头元素,但不移除,若队列为空,会抛出异常:NoSuchElementException,不推荐使用     @Test     public void test4() {         // 查看首个元素         String element = queue.element();         System.out.println(element); // a         System.out.println(queue); // [a, b, c, d, e]     }  }

脚本宝典总结

以上是脚本宝典为你收集整理的Java知识点总结(Java容器-Queue)全部内容,希望文章能够帮你解决Java知识点总结(Java容器-Queue)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。