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之优先队列的更多相关文章

  1. 【Java基础】JAVA中优先队列详解

    总体介绍 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序( ...

  2. 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 ...

  3. java的优先队列注意事项

    在C++语言中,使用优先队列,直接构建一个lambda表达式,使用一个匿名函数指针.java比较函数的返回值不是bool型,只能是整型. 内部对应的C++匿名函数: // 匿名Comparator实现 ...

  4. 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 ...

  5. JAVA数据结构--优先队列(堆实现)

    优先队列(堆)的定义 堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称.堆通常是一个可以被看做一棵树的数组对象.在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的 ...

  6. Java的优先队列PriorityQueue详解

    一.优先队列概述 优先队列PriorityQueue是Queue接口的实现,可以对其中元素进行排序, 可以放基本数据类型的包装类(如:Integer,Long等)或自定义的类 对于基本数据类型的包装器 ...

  7. Java 优先队列

    Java PriorityQueue 优先队列是一种重要的数据结构,其利用的是小/大顶堆来实现的. Java中提供了PriorityQueue,PriorityQueue是基于小顶堆实现的无界优先队列 ...

  8. Java Collection - PriorityQueue 优先队列

    总结 优先队列的作用是能保证每次取出的元素都是队列中权值最小的(Java的优先队列每次取最小元素,C++的优先队列每次取最大元素).这里牵涉到了大小关系,元素大小的评判可以通过元素本身的自然顺序(na ...

  9. 深入理解Java PriorityQueue

    PriorityQueue 本文github地址 Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示.本文从Queue接口函数出发,结合生动的图解,深入浅出地分析Prio ...

随机推荐

  1. cas 服务端相关配置

    SSO-安全证书配置 CAS默认使用的是HTTPS协议,如果对安全要求不高,可以使用HTTP协议 修改deployerConfigContext.xml(cas/WEB-INF)增加参数 p:requ ...

  2. 多种方法实现 python 线程池

    最近在做一个爬虫相关的项目,单线程的整站爬虫,耗时真的不是一般的巨大,运行一次也是心累,,,所以,要想实现整站爬虫,多线程是不可避免的,那么python多线程又应该怎样实现呢?这里主要要几个问题(关于 ...

  3. JAXP/DOM demo

    body, table{font-family: 微软雅黑; font-size: 10pt} table{border-collapse: collapse; border: solid gray; ...

  4. 玩转X-CTR100 l STM32F4 l OLED显示-SSD1306无字库

    我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ]      OLED显示屏具有自发光特性,不需要背光, ...

  5. Python获取路径下所有文件名

    python 获取当前文件夹下所有文件名   os 模块下有两个函数: os.walk() os.listdir() 1 # -*- coding: utf-8 -*- 2 3 import os 4 ...

  6. FMX StringGrid向上滑动自动加载记录(一)

    有时候,做的app还是需要用StringGrid来显示数据,但如果用StringGrid的Livebinding绑定到一个数据集TDataset,当记录超过1000条时,效率非常低,甚至达不到实用状态 ...

  7. Redis 缓存服务器

    Redis 服务器 Remote Dictionay Server   Redis是一个key-value持久化产品,通常被称为数据结构服务器. Redis的key是string类型:value可以是 ...

  8. webbench-1.5_hacking

    /**************************************************************************** * * webbench-1.5_hacki ...

  9. OK335xS U-boot 环境变量解析

    /************************************************************************************************** ...

  10. 20155301 2016-2017-2 《Java程序设计》第9周学习总结

    20155301 2016-2017-2 <Java程序设计>第9周学习总结 教材学习内容总结 JDBC全名Java DataBase Connectivity,是联机数据库的标准规范.具 ...