zoukankan      html  css  js  c++  java
  • 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/
  • 相关阅读:
    ubuntu远程windows桌面
    spring boot 给返回值加状态 BaseData
    spring boot 拦截异常 统一处理
    IntelliJ IDEA spring boot 远程Ddbug调试
    IntelliJ IDEA 常用插件
    spring boot 请求地址带有.json 兼容处理
    spring boot 接口返回值去掉为null的字段
    spring boot 集成disconf
    Spring boot 自定义拦截器
    Linux下安装MySQL
  • 原文地址:https://www.cnblogs.com/JavaBlackHole/p/7675159.html
Copyright © 2011-2022 走看看