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 ...
随机推荐
- C语言define 可以提高程序运行的速度
define的优缺点 优点 提高了程序的可读性,同时也方便进行修改: 提高程序的运行效率:使用带参的宏定义既可完成函数调用的功能,又能避免函数的出栈与入栈操作,减少系统开销,提高运行效率: 3.宏是由 ...
- Flash网页mp3播放器代码(3例)
第一款:可以添加多首歌 代码如下:可以添加多首歌曲中间用 | 间隔符号隔开 <EMBED height=20 type=application/x-shockwave-flash plugi ...
- Java——文件过滤器
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- 基于Dlib、OpenCV开发人脸识别程序的开发建议
前言 在去年十月的时候参加了一个小比赛,做了一个人脸识别程序并很意外地获得省里面的一等奖,视频演示链接在这里,有同学想要做这方面的毕业设计or课程设计,发一篇博客来分享一下当时的开发过程. 视频演示链 ...
- android开源项目集合
ZXing http://code.google.com/p/zxing/ 条形码.二维码 K-9 Mail http://code.google.com/p/k9mail/ 邮件客户端 Sipdro ...
- How to understand three foundanmental faults?
1.First ,try to understand "Green function and the moment tensor" in Seismology,9.1 2.seco ...
- 将本地的一个新项目上传到GitHub上新建的仓库中去
转载: 如何将本地的一个新项目上传到GitHub上新建的仓库中去 踩过的坑: 1.在git push时报错 error: RPC failed; curl 56 SSL read: error:000 ...
- Android 源码阅读之SMS,MMS
主界面: com.android.mms.ui.ConversationList.java [extends ListActivity] 点击新建信息:onListItemClick -〉 posi ...
- Texas Instruments matrix-gui-2.0 hacking -- helper_functions.php
<?php # PHP_SELF: 但前正在执行脚本的文件名,与document root相关 # QUERY_STRING: 查询(query)的字符串 $cachefile = " ...
- NSObject之二
前面一章我们整理了NSObject类,这一章我们来看看NSObject协议的内容. NSObject协议提供了一组方法作为Objective-C对象的基础.其实我们对照一个NSObject类和NSOb ...