Java中的优先级队列练习

这篇博客展示了如何利用Java的PriorityQueue和自定义Comparator实现元素的优先级排序。示例中分别创建了IntegerComparator和TianGanComparator,用于对整数和十二生肖字符串进行降序排列。博客通过添加和移除元素,演示了优先队列的基本操作和排序效果。
摘要由CSDN通过智能技术生成
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class PriorityQueueDemo {
    static class IntegerComparator implements Comparator<Integer> {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2.compareTo(o1);
        }
    }

    // 鼠、牛、虎、兔、龙、蛇

    public static void main(String[] args) {
        Queue<String> queue = new PriorityQueue<>(new TianGanComparator());
        queue.add("鼠");
        queue.add("牛");
        queue.add("虎");
        queue.add("兔");
        queue.add("龙");
        queue.add("蛇");

        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
    }

    static class TianGanComparator implements Comparator<String> {

        @Override
        public int compare(String o1, String o2) {
            return transform(o1) - transform(o2);
        }

        private int transform(String s) {
            switch (s) {
                case "蛇": return 1;
                case "龙": return 2;
                case "兔": return 3;
                case "虎": return 4;
                case "牛": return 5;
                case "鼠": return 6;
                default: return -1;
            }
        }
    }

    public static void main2(String[] args) {
        Comparator<Integer> comparator = new IntegerComparator();
        PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(comparator);
        Queue<Integer> queue = priorityQueue;

        queue.add(3);
        queue.add(5);
        queue.add(2);
        queue.add(1);
        queue.add(4);

        // Integer 实现过 Comparable
        // PriorityQueue 是小堆
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
        System.out.println(queue.remove()); 
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值