JAVA优先级队列测试

package code.test;

import java.util.Comparator;
import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.Queue;

/**
 * 实验表明,在java中:
 * 1.优先级队列打印或者迭代,得到的输出顺序为堆结构数组的顺序,大致有序但不完全保证顺序
 * 2.由于堆排序是不稳定排序,在优先级相同的情况下,元素不会保持原来的顺序输出
 * Created by cg on 2017/9/7.
 */
public class PriorityQueueTest {
    public static void main(String[] args) {
        Queue<Integer> queue = new PriorityQueue<Integer>();
        queue.add(1);
        queue.add(5);
        queue.add(3);
        queue.add(2);
        queue.add(8);
        queue.add(10);
        queue.add(23);
        queue.add(14);
        System.out.println(queue); //输出:[1, 2, 3, 5, 8, 10, 23, 14]
        Iterator<Integer> iterator = queue.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next() + " ");
        }//输出:1 2 3 5 8 10 23 14
        System.out.println();
        Queue<Student> queue1 = new PriorityQueue<Student>(new Comparator<Student>() {
            @Override
            public int compare(Student s1, Student s2) {
                return s1.age - s2.age;
            }
        });
        queue1.add(new Student("a", 14));
        queue1.add(new Student("b", 12));
        queue1.add(new Student("c", 12));
        queue1.add(new Student("d", 12));
        queue1.add(new Student("e", 12));
        queue1.add(new Student("f", 13));
        queue1.add(new Student("g", 11));
        while (!queue1.isEmpty()){
            System.out.println(queue1.poll());
        }
        /*输出
        g:11
        c:12
        d:12
        e:12
        b:12
        f:13
        a:14
         */
    }
}

class Student{
    String name;
    int age;

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return name + ":" + age;
    }
}
时间: 2024-12-15 01:44:05

JAVA优先级队列测试的相关文章

Java优先级队列PriotyQueue

优先级队列,顾名思义,和传统"先进后出"的队列相比,优先级队列在元素加入时就根据该元素的优先级插入到相应位置.实际上优先级队列PriotyQueue在poll时还是遵循先进后出,只是数据在进入时已经根据优先级排序了.实现优先级队列需要实现一个Comparator,测试代码如下: public class PriotyQueueTest { //比较器,用于判断两个元素的优先级 Comparator<Man> t = new Comparator<Man>() {

java优先级队列调度

1 { return needtime; } public int getPri() { return pri; } public char getState() { return state; } public void setState(char state) { this.state = state; } } ReadCommand.java文件 import java.io.InputStream; import java.util.ArrayList; import java.util

java使用优先级队列实现哈夫曼编码

思路: 构建小根堆 根据小根堆实现哈夫曼树 根据哈夫曼树对数据进行编码 代码实现如下: /** * @Author: DaleyZou * @Description: 使用java实现一个哈夫曼编码的小程序 * @Date: Created in 19:45 2018-9-27 * @Modified By: */ public class HuffmanCode { private class Node implements Comparable<Node>{ char ch; // 字符

【转】java中PriorityQueue优先级队列使用方法

优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列. 由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就写了个demo~ 如果想实现按照自己的意愿进行优先级排列的队列的话,需要实现Comparator接口.下面的方法,实现了根据某个变

java数据结构与算法值优先级队列

一.优先级队列 什么是优先级队列:优先级队列是一种比栈和队列更加常用的一种数据结构.在优先级队列中,数据项按照关键字的值有序.数据项插入到队列中时,会按照顺序插入到合适的位置,用来保证队列的顺序. 生活中的例子,假设你有若干封件,你最急需要处理的文件就放在所有邮件的 顶部,如果不急需处理的文件就放放在下面. 参考代码: package edu.structure.queue; public class PriorityQ { private int maxSize; private int[]

《转》JAVA中PriorityQueue优先级队列使用方法

该文章转自:http://blog.csdn.net/hiphopmattshi/article/details/7334487 优先级队列是不同于先进先出队列的另一种队列.每次从队列中取出的是具有最高优先权的元素. PriorityQueue是从JDK1.5开始提供的新的数据结构接口. 如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列. 由于网上的资料大多将优先级队列各个方法属性,很少有实例讲解的,为方便大家以后使用,我就

java 队列、优先级队列、双向队列示例演示代码

package org.rui.collection2.queues; import java.util.LinkedList; import java.util.PriorityQueue; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.Li

java使用数组实现优先级队列

1.1.  优先级队列的数据结构 如果我们给每个元素都分配一个数字来标记其优先级,不妨设较小的数字具有较高的优先级,这样我们就可以在一个集合中访问优先级最高的元素并对其进行查找和删除操作了.这样,我们就引入了优先级队列这种数据结构. 优先级队列(priorityqueue)是0个或多个元素的集合,每个元素都有一个优先权,对优先级队列执行的操作有(1)查找(2)插入一个新元素(3)删除一般情况下,查找操作用来搜索优先权最大的元素,删除操作用来删除该元素.对于优先权相同的元素,可按先进先出次序处理或

java面向对象的栈 队列 优先级队列的比较

栈 队列 有序队列数据结构的生命周期比那些数据库类型的结构(比如链表,树)要短得多.在程序操作执行期间他们才被创建,通常用他们去执行某项特殊的任务:当完成任务之后,他们就会被销毁.这三个数据结构还有一个特点就是访问是受到限制的,即在特定时刻只有一个数据项可以被读取或者被删除,但是所谓的移除并不是真的删除,数据项依然在这些数据结构中,只不过因为指针已经指向其他数据项,没有办法访问到,当添加新的数据项时,当初移除的数据项被替代从而永远消失. 栈 队列 优先级队列的模拟思想 1.栈:栈遵循先进后出(F