Java之优先队列
PriorityQueue属于Java Collections Framework。PriorityQueue基于优先级堆,它是Queue接口的实现。当我们需要一个Queue实现时,可以使用这种数据结构,
并且我们需要根据每个元素的优先级,以特定的排序顺序来维护该集合的元素。它在JDK 1.5中引入
Java 之优先队列要点
- 在实例化PriorityQueue时,可以在构造函数中提供比较器。然后队列中的项目顺序将根据提供的比较器来决定。
- 如果没有提供比较器,则将使用Collection的自然顺序(Comparable)来排序元素。
- 此集合中不允许为null。
- 排队队长是排序中最少的项目。
- PriorityQueue元素之间的排序关系是任意决定的。
- PriorityQueue未同步。PriorityBlockingQueue是PriorityQueue的线程安全对应。
- PriorityQueue是无界的,它会根据队列中的元素数量动态增长。它在任何给定时间都具有内部能力,随着元素的添加而增加。这种内部容量和增量的政策没有指定或标准化。
- 此PriorityQueue的iterator()不保证以任何特定顺序遍历队列元素。
- 表现明智 remove()和contains()方法采用线性时间。peek(),element()和size()需要固定的时间。offer(),poll()和remove()取O(log n)时间。
- offer()和add()是Queue接口的方法,由PriorityQueue实现。这些用于在队列中插入元素。他们在PriorityQueue方面的表现相同,没有区别。
PriorityQueue示例
以下示例说明了如何使用Java PriorityQueue集合。
PriorityQueueExample.java
package com.javapapers.java; import java.util.Comparator;
import java.util.PriorityQueue; public class PriorityQueueExample {
public static void main(String[] args) {
Comparator<String> queueComparator = new VowelComparator();
PriorityQueue<String> priorityQueue = new PriorityQueue<String>(10,
queueComparator);
priorityQueue.add("orange");
priorityQueue.add("fig");
priorityQueue.add("watermelon");
priorityQueue.add("lemon");
while (priorityQueue.size() != 0) {
System.out.println(priorityQueue.remove());
}
}
}
VowelComparator.java
此Comparator类用于确定上述PriorityQueue的排序顺序。
package com.javapapers.java; import java.util.Comparator; class VowelComparator implements Comparator<String> { @Override
public int compare(String x, String y) {
if (getVowelCount(x) < getVowelCount(y)) {
return -1;
} else if (getVowelCount(x) > getVowelCount(y)) {
return 1;
}
return 0;
} public int getVowelCount(String word) {
int vowel = 0;
for (int i = 0; i < word.length(); i++) {
char chr = word.charAt(i);
if (chr == 'a' || chr == 'A' || chr == 'e' || chr == 'E'
|| chr == 'i' || chr == 'I' || chr == 'o' || chr == 'O'
|| chr == 'u' || chr == 'U')
vowel++;
}
return vowel;
}
}
PriorityQueue示例输出:
fig
lemon
orange
watermelon http://javapapers.com/java/search-file-using-nio/
Java之优先队列的更多相关文章
- 【Java基础】JAVA中优先队列详解
总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...
- 378. Kth Smallest Element in a Sorted Matrix(java,优先队列)
题目: Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the ...
- java的优先队列注意事项
在C++语言中,使用优先队列,直接构建一个lambda表达式,使用一个匿名函数指针.java比较函数的返回值不是bool型,只能是整型. 内部对应的C++匿名函数: // 匿名Comparator实现 ...
- 373. Find K Pairs with Smallest Sums (java,优先队列)
题目: You are given two integer arrays nums1 and nums2 sorted in ascending order and an integer k. Def ...
- JAVA数据结构--优先队列(堆实现)
优先队列(堆)的定义 堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的 ...
- Java的优先队列PriorityQueue详解
一.优先队列概述 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序, 可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类 对于基本数据类型的包装器 ...
- Java 优先队列
Java PriorityQueue 优先队列是一种重要的数据结构,其利用的是小/大顶堆来实现的. Java中提供了PriorityQueue,PriorityQueue是基于小顶堆实现的无界优先队列 ...
- Java Collection - PriorityQueue 优先队列
总结 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(na ...
- 深入理解Java PriorityQueue
PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析Prio ...
随机推荐
- jquery条形码生成器
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- 玩转X-CTR100 l STM32F4 l CAN通信
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] X-CTR100控制器STM32F4处理器内置CAN ...
- Python与系统的交互方式
本节内容 os与commands模块 subprocess模块 subprocess.Popen类 总结 我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell ...
- L224 词汇题
Elaborate 精心的 preparations were being made for the Prime Minister’s official visit to the four forei ...
- 图片预加载 js css预加载
图片预加载, 效果非常明显, 特别是有多个图, 方法很简单 , 体验提升了不少 <div class="hidden"> <script type= ...
- SWIFT Function
Swift中的函数跟JAVA语言的函数差不多,但也有差别,SWIFT中定义函数可以指定参数的名称这也是别的语言没有的,好处就是增加了可读性.其返回值是放在未尾的,如以下定义一个加法器: func ad ...
- Windows 下python的tab自动补全
方法一:安装一个ipython就OK啦,而且关键字还能高亮显示呢 一.打开cmd,输入pip3 install ipython联网安装 二.安装成功后,cmd里运行ipython,成功啦. 方法二:写 ...
- sql,将一天所有记录按小时划分
mysql: select date_format(H_TIME,'%H') as HOUR, ROUND(AVG(H_TEMPERATURE),1) as TEMP, ROUND(AVG(H_HUM ...
- pycharm 提示性信息
语法错误:文字底部红色波浪线 解决方案:语法修改正确 语法不符合规范:文字底部灰色波浪线 解决方案:快捷键(Alt + Enter + Enter ) 单词拼写提示:文字底部绿色波浪线 解决方案: 单 ...
- select 从应用层到内核实现解析
在一个应用中,如果需要读取多个设备文件,这其中有多种实现方式: 1.使用一个进程,并采用同步查询机制,不停的去轮询每一个设备描述符,当设备描述符不可用时,进程睡眠. 2:使用多个进程或者线程分别读取一 ...