`
oywl2008
  • 浏览: 1050567 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

深入理解Java PriorityQueue

 
阅读更多

本文github地址

Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。本文从Queue接口函数出发,结合生动的图解,深入浅出地分析PriorityQueue每个操作的具体过程和时间复杂度,将让读者建立对PriorityQueue建立清晰而深入的认识。

总体介绍

前面以Java ArrayDeque为例讲解了StackQueue,其实还有一种特殊的队列叫做PriorityQueue,即优先队列。优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素)。这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(natural ordering),也可以通过构造时传入的比较器Comparator,类似于C++的仿函数)。

Java中PriorityQueue实现了Queue接口,不允许放入null元素;其通过堆实现,具体说是通过完全二叉树(complete binary tree)实现的小顶堆(任意一个非叶子节点的权值,都不大于其左右子节点的权值),也就意味着可以通过数组来作为PriorityQueue的底层实现。

 

 

http://www.cnblogs.com/CarpenterLee/p/5488070.html

 

public class KthLargeInArray {

    public static void main(String[] args) {
        
        System.out.println(findKthLargest(new int[]{1,9,5,4,3}, 1));

    }
    public static int findKthLargest(int[] nums, int k) {
        PriorityQueue<Integer> q = new PriorityQueue<Integer>(k);
        for(int i: nums){
            q.offer(i);
     
            if(q.size()>k){
                System.out.println("q: " + q.poll());
            }
        }
     
        return q.peek();
    }
}

 

 

 

分享到:
评论

相关推荐

    JAVA:PriorityQueue

    ### Java中的PriorityQueue详解 #### 类概述 `PriorityQueue`是Java集合框架的一部分,它是一个基于优先级堆的无界优先级队列。...通过对它的深入理解,开发者可以更好地利用这一工具来优化自己的应用程序。

    java优先队列PriorityQueue中Comparator的用法详解

    本文将深入探讨`PriorityQueue` 中`Comparator`的用法。 首先,创建一个`PriorityQueue`实例时,可以传递一个`Comparator`作为构造参数,这样就可以根据提供的比较器规则来决定元素的顺序。例如,以下代码创建了一...

    Lists_Stack_Queue_PriorityQueue.java

    在Java编程语言中,`Lists`, `Stack`, `Queue`, 和 `PriorityQueue` 是四个重要的数据结构,它们各自在不同的场景...通过阅读和理解这段代码,你可以深入了解这些数据结构的使用方式,以及它们在实际问题解决中的应用。

    优先队列-java可以选择属性和升序降序

    首先,让我们深入理解`PriorityQueue`的基本概念。`PriorityQueue`是基于二叉堆(一种自平衡的树形数据结构)实现的,它不保证队列的顺序,除非你指定比较器。默认情况下,队列按自然顺序进行排序,即所有元素必须...

    java从入门到深入

    本课程“Java从入门到深入”旨在为初学者提供全面且系统的Java学习路径,适合对Java有浓厚兴趣并立志深入研究的爱好者。 1. **Java基础知识** - **环境配置**:首先,学习Java需要安装Java Development Kit (JDK)...

    java中Collection深入剖析

    总的来说,Java中的`Collection`框架是编程的核心工具之一,理解其工作原理和使用技巧,能够帮助开发者编写出更加高效、可靠的代码。通过深入学习和实践,你可以更好地驾驭这个强大的工具集,提升你的编程能力。

    PriorityQueue:使用 O(LogN) 复杂度为测试类实现 PriorityQueue

    在`PriorityQueue-master`这个压缩包中,可能包含了该项目的源代码实现,通过阅读和分析这些代码,我们可以更深入地了解PriorityQueue的内部实现和O(LogN)复杂度是如何达到的。你可以查看源码中的测试类,它通常会...

    Java集合框架全景:深入理解主要接口和类

    本文将深入探讨Java集合框架中的主要接口与类,帮助读者更好地理解和应用这些工具。 #### 集合框架概述 Java集合框架主要包括四种类型的集合:List、Set、Queue和Map。每种集合都有其独特的特性和应用场景。 - **...

    Java 2 高级程序设计百事通

    通过《Java 2 高级程序设计百事通》的学习,开发者不仅可以掌握上述技术,还能深入了解Java内存管理、垃圾回收机制、性能优化策略以及JVM的工作原理。这本书的实例丰富,将理论知识与实践结合,有助于读者更好地理解...

    java 吃水果问题 代码

    下面我们将深入探讨这个问题,以及如何用Java来实现它。 首先,我们需要定义一个数据结构来存储水果的信息。这里可以使用数组或者ArrayList来存放各种水果,每个元素代表一种水果。例如: ```java String[] fruits...

    2021年Java大厂面试题整理大全

    2. 多态性:深入理解多态的实现方式和好处,如方法重载和方法覆盖。 3. 泛型:学习泛型的使用,如何限制类型参数,以及泛型通配符。 三、集合框架 1. List、Set、Queue:理解这些接口的特性,以及ArrayList、...

    JAVA基本5种数据结构的实现。

    本主题将深入探讨Java中的五种基础数据结构:链表、队列、栈、双端队列(deque)以及堆。我们将通过分析给定的源代码文件来理解这些数据结构的实现。 首先,链表是一种线性数据结构,它不连续存储数据,而是通过...

    java实际公司面试题目

    Java实际公司面试题目通常涵盖了广泛的知识点,包括基础语法、面向对象编程、集合框架、多线程、异常处理、JVM、设计模式...深入理解和实践这些内容,将有助于在面试中脱颖而出,也能在实际工作中提升解决问题的能力。

    220个JAVA初学者实例

    12. **集合框架**:深入理解List、Set、Queue等接口,以及它们的实现类,例如ArrayList、LinkedList、TreeSet、PriorityQueue等。 13. **泛型**:泛型提供类型安全,减少类型转换,提高代码可读性和可维护性。 14....

    数据结构java版

    通过学习《数据结构(java版)》,读者可以深入了解这些数据结构的原理,掌握如何在实际项目中有效地利用它们,从而提升程序性能和代码质量。此外,理解这些数据结构的内部工作原理也是面试中常见的技术考察点,对于...

    《Java语言程序设计(进阶篇)》 课后习题第25章代码chapter25.rar

    4. **集合框架的高级使用**:包括`HashMap`, `TreeMap`, `HashSet`, `LinkedList`, `ArrayList`, `PriorityQueue`等容器的深入理解和应用,以及`Collections`类提供的各种操作(排序、复制、反转等)。可能还会涉及...

    Java 数据结构 面试用

    本资料包主要聚焦于Java实现的数据结构,旨在帮助面试者深入理解并掌握这些核心概念。下面我们将详细探讨一些关键的数据结构及其在Java中的应用。 1. **数组**:数组是最基础的数据结构,它是一系列相同类型元素的...

    java集合框架全面进阶

    5. **源码分析**:深入理解Java集合框架的源码,有助于优化代码性能。例如,了解HashMap的扩容机制、LinkedList的节点操作、ArrayList的动态数组管理等,能够帮助开发者在设计和实现自己的数据结构时避免常见陷阱。 ...

    一个讲解很清晰的Java集合框架PPT

    这个“一个讲解很清晰的Java集合框架PPT”显然是一个对外公开的教育资源,旨在帮助学习者深入理解Java集合的概念、结构以及实际应用。 在Java中,集合框架主要包括四大接口:List、Set、Queue和Map。每个接口都有...

    Java版本数据结构实验报告

    在本实验报告中,我们将深入探讨Java编程语言中的核心数据结构。数据结构是计算机科学的基础,它涉及到如何高效地组织和存储数据,以便于访问和处理。Java版本的数据结构实验旨在帮助学生理解并掌握这些概念,并能...

Global site tag (gtag.js) - Google Analytics