6. Queue

Queue

队列是一种重要的数据结构,跟人排队购票类似。Java集合中队列相关的类有:

1. LinkedList
LinkedList实现了Queue和Deque接口,所以LinkedList也用来实现普通队列,相关操作有: offer, poll, peek, offerFirst, offerLast, pollFirst, pollLast, peekFirst, peekLast。 具体见LinkedList一节

2. ArrayDeque
ArrayDeque是底层基于数组的队列,操作跟LinkedList的一样

3. PriorityQueue
优先级队列,即插入的元素不是依次从队尾插入,而是保持一定的顺序,出列时队首的先出。

4. ConcurrentLinkedQueue, ConcurrentLinkedDeque
支持并发的队列

5. BlockingQueue: ArrayBlockingQueue, LinkedBlockingQueue, PriorityBlockingQueue, LinkedBlockingDeque etc…
阻塞队列:基于数组的阻塞队列,基于链表的阻塞队列,优先级阻塞队列等。
阻塞队列非常有用,可以非常轻松实现多线程场景下生产消费者模式

PriorityQueue

优先级队列在工作中有很多应用,如OS按优先级队列获取待执行进程。Java中的PriorityQueue是非线程安全的, 底层是数组。 当入列时按优先级插入到指定位置,出列时取头元素。

优先级队列底层用到了基于数组的heap树型数据结构,即大顶堆,小顶堆。

offer, pull操作的时间复杂度是: O(logN)
入列,出列会涉及到堆化,平均时间复杂度就是O(logN)

remove(Object), contains(Object)的时间复杂度是: O(N)
移除指定的元素时需要先遍历数组项,找到目标元素,移除再重新堆化

peek的时间复杂度是: O(1)
这个好理解,只是取队首元素,常量时间即可

BlockingQueue

阻塞队列在后面并发包再讲

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值