• 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/
  • 相关阅读:
    合并两个排序的链表
    把数组排成最小的数
    maven下使用jstl标签(1.2)版本
    SpringMVC5中,@ModelAttribute注解详解
    JavaWeb项目中斜杠(/)表示web工程、webapps的场景
    JavaWeb中jsp路径斜杆(/)跟没斜杆的路径映射问题
    关于Java多线程-interrupt()、interrupted()、isInterrupted()解释
    常见的HTTP状态码
    Java中的String,StringBuilder,StringBuffer三者的区别
    解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题
  • 原文地址:https://www.cnblogs.com/JavaBlackHole/p/7675159.html
Copyright © 2020-2023  润新知