Java集合——双端队列&优先队列API

本文介绍了Java中的双端队列Deque接口及其实现,如ArrayDeque和LinkedList,支持在队头和队尾高效地添加或删除元素。同时,文章也讲解了优先队列PriorityQueue,它使用堆数据结构保证取出元素的顺序,常用于任务调度等场景。
摘要由CSDN通过智能技术生成

双端队列(deuqe)

        在队头和队尾都能高效地添加或删除元素,不支持在队列中间添加元素。Java6中引入了Deque接口,ArrayDeque和LinkedList类都实现了这个接口,这两个类都可以提供双端队列,大小根据需要调整。

        API:

        1、java.util.Queue<E> 5

                boolean add(E element)                

                boolean offer(E element)---如果队列没有满 给定的 元素添加到这个队列的队尾并返回 true。如果队列已满, 第一 个方法 将抛出 一个 IllegalStateException, 而第二个方法返回 false

                E remove()

                E poll() --- 如果队列不为空删除并返回这个队列队头的元素如果队列是空的第一个方法抛 出 NoSuchElementException,而第二个方法返回 null

                E element()

                E peek() --- 如果队列不为空返回这个队列队头的元素但不删除这个元素如果队列为空,第 一个方法将抛出一个NoSuchElementException,而第二个方法返回null

        2、java.util.Deque<E> 6

                void addFirst(E element)

                void addLastfE element)

                boolean offerFirst(E element)                 

                boolean offerLast(E element)--- 将给定的对 象添加 到双端队列的 队头或 队尾 如果这个双端队列已满 ,前面两个方法 将抛出一个 IllegalStateException , 而后面两个方 法返回 false
                
                E removeFirstO
                E removeLast()
                E pollFirst()
                E pollLast()---如果这个双端队列不为空 删除并返回双端队列队头的 元素 如果双端队列 为空 ,前 面两个方法将抛出 一个 NoSuchElementException, 而后面 两个方法返回 null
                E getFirst()
                E getLast()
                E peekFirst()
                E peekLast()---如果这个双端队列非空 返回双端队列队头的元素 但不删 除这个元素 如果双端队 列为空 前面两个方法将抛 出一个 NoSuchElementException, 而后面两个方法返回 null
        3、java.ytil.ArrayDeque<E> 6
                ArrayDeque()
                ArrayDeque(int initialCapacity) --- 用初始容量 16 或给定的初始容量构造一个无限定双端 队列

优先队列

        优先队列(priority queue)中的元素可以按照任意的顺序插入,但会按照有序的顺序获取,即调用remove方法时,总会获取当前优先队列中最小的元素,但优先队列并没有对所有元素进行排序,如果迭代处理这些元素,并不需要进行排序。优先队列使用了堆数据结构(heap),堆是一个自组织的二叉树,其添加(add)和删除(remove)操作会将最小的元素移动到根,而不必花费时间对元素进行排序。

        优先队列既可以实现了Comparable接口的类对象,也可以包含构造器中提供的Comparator对象。

        优先队列的典型用法是任务调度,每一个任务有一个优先级,任务以随机顺序添加到队列中,每启动一个新任务时,将从队列中删除优先级最高的任务。

        示例程序:一个优先队列的具体使用,与TreeSet中迭代不同,这里的迭代不是按照有序顺序来访问元素的,但是删除操作总是删除剩余元素中最小的那个元素。

        

        附录:API

         1、java.util.PriorityQueue 5               

                PriorityQueue()
                PriorityQueue(int initialcapacity)--- 构造一 个存放 Comparable 对象的优先队列
                PriorityQueue(int initialcapacity, Comparator? super E> c)---构造 一个优 先队列 并使用指定的比较器对元素进行排序
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值