本篇内容介绍了“Java数据结构中的堆怎么应用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!让parent标记需要调整的节点,child标记parent的左孩子(注意:parent如果有孩子一定先是有左孩子)如果parent的左孩子存在,即:child
parent右孩子是否存在,存在找到左右孩子中最小的孩子,让child进行标记将parent与较小的孩子child比较,如果:parent小于较小的孩子child,调整结束否则:交换parent与较小的孩子child,交换完成之后,parent中大的元素向下移动,可能导致子树不满足堆的性质,因此需要继续向下调整,即parent = child;child = parent*2+1; 然后继续2。对于普通序列,我们需要从它的第一个有左节点的父节点开始调整,知道整棵树满足堆的性质。堆必须是完全二叉树,满二叉树也是完全二叉树。由下面的计算,创建堆的时间复杂度为O(n).将要插入的元素放在堆的最后,如果放不了,进行扩容将新插入的节点向上调整,直到满足堆的性质【向上调整】根据堆的性质,对删除的一定是堆顶元素。步骤如下:将堆顶元素和最后一个元素交换堆的元素个数减一对堆顶元素进行向下调整升序:创建大根堆降序:创建小根堆交换堆顶元素和堆得最后一个元素,进行向下调整,直到堆有序。top-k问题:求数据集合中前k个大或者小的元素,一般数据量都比较大。Java集合框架中提供了PriorityQueue和PriorityBlockingQueue两种类型的优先级队列。PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的,本文主要介绍PriorityQueue。【PriorityQueue】使用的注意事免费云主机域名项:必须导入PeioriryQueue的包;放置的元素必须是能够比较大小的,否则会抛出ClassCastException异常;不能放置null元素,否则会抛出NullPointerException;可以插入任意多的元素,内部会自动扩容;底层使用了堆数据结构,默认是小堆。如果要构建大堆,则需要提供比较器。PriorityQueue的扩容方式:如果容量小于64时,是按照oldCapacity的2倍方式扩容的如果容量大于等于64,是按照oldCapacity的1.5倍方式扩容的如果容量超过MAX_ARRAY_SIZE,按照MAX_ARRAY_SIZE来进行扩容int newCapacity = oldCapacity + ((oldCapacity
(oldCapacity + 2) : (oldCapacity >> 1));PriorityQueue采用了:Comparble和Comparator两种方式。1. Comparble是默认的内部比较方式,如果用户插入自定义类型对象时,该类对象必须要实现Comparble接口,并覆写compareTo方法2. 用户也可以选择使用比较器对象,如果用户插入自定义类型对象时,必须要提供一个比较器类,让该类实现Comparator接口并覆写compare方法“Java数据结构中的堆怎么应用”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注百云主机网站,小编将为大家输出更多高质量的实用文章!
这篇文章主要讲解了“JVM分析之类加载机制是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“JVM分析之类加载机制是什么”吧!JVM内部架构包含类加载器、内存区域、执行引擎等。日常开发中,我们编写的java文…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。