【你问我答】Java有多少种队列?

问题描述:

Java有多少种队列?分别讲一下

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java工程师##面试题目#
全部评论
Java一共有五大队列 五个队列所提供的各有不同:   ArrayBlockingQueue : 一个由数组支持的有界队列。 LinkedBlockingQueue : 一个由链接节点支持的可选有界队列。LinkedBlockingQueue的容量(在不指定时容量为Integer.MAX_VALUE),但是也可以选择指定其最大容量,它是基于链表的队列,此队列按 FIFO(先进先出)排序元素。 PriorityBlockingQueue : 一个由优先级堆支持的无界(没有容量限制)优先级队列。 是一个带优先级的 队列,而不是先进先出队列。元素按优先级顺序被移除. DelayQueue : 一个由优先级堆支持的、基于时间的调度队列。(基于PriorityQueue来实现的)是一个存放Delayed 元素的无界阻塞队列,只有在延迟期满时才能从中提取元素。该队列的头部是延迟期满后保存时间最长的 Delayed 元素。如果延迟都还没有期满,则队列没有头部,并且poll将返回null。当一个元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回一个小于或等于零的值时,则出现期满,poll就以移除这个元素了。此队列不允许使用 null 元素。 SynchronousQueue : 一个利用 BlockingQueue 接口的简单聚集(rendezvous)机制。
点赞 回复
分享
发布于 2020-12-15 17:59
如图1所示,按不同分类方式可以进行基本的3种分类方式。 (1)如果一个队列已满,此时要插入元素  &nbs***bsp;   一个队列已空,此时要提取元素   出现如上情况时,如果阻塞称为阻塞队列(名字中含有Blocking Queue字样,例如ArrayBQ、LinkedBQ、PriorityBQ等,如图2所示),在出现上面情况时会暂时阻塞,直到队列元素不满时再插入(或队列元素不空时再提取);若不阻塞称为非阻塞队列,遇到上面情况时会直接报错; (2)有界队列和无界队列很好理解,也即是否设置了固定大小。当然实际上无界队列默认最大长度为Integer.MAX_VALUE (3)按功能分类: (3-1)普通队列(基本先入先出队列,可用固定长度数组或链表实现) (3-2)双端队列(可以在头部和尾部同时入队或出队) (3-3)优先队列(二叉堆实现,优先级高的元素先出队) (3-4)延迟队列(基于优先队列实现,入队的元素需入队一定时间才能出队,如图3所示) (3-5)特殊队列(例如SynchronousQueue,每次添加数据后必须等待另一个线程拿走数据之后,才可以继续添加数据)
点赞 回复
分享
发布于 2020-12-17 19:13
滴滴
校招火热招聘中
官网直投

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务