JAVA 中 类型是 Map 的 PriorityQueue 3种写法
2022/7/21 14:22:56
本文主要是介绍JAVA 中 类型是 Map 的 PriorityQueue 3种写法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JAVA 中 类型是 Map 的 PriorityQueue 3种写法
刷题的时候发现不是很熟悉JAVA 里的 heap(堆) 即 PriorityQueue 的用法,记录一下 PriorityQueue<Map.Entry<>> 的基本用法:
写法一,直接 new 一个Comparator:
PriorityQueue<Map.Entry<Integer, Integer>> priorityQueue = new PriorityQueue<>( new Comparator<Map.Entry<Integer, Integer>>() { public int compare(Map.Entry<Integer, Integer> e1, Map.Entry<Integer, Integer> e2) { return e1.getValue() - e2.getValue(); } });
写法二, 对写法一 优化:
PriorityQueue<Map.Entry<Integer, Integer>> priorityQueue = new PriorityQueue<>( (e1, e2) -> e1.getValue() - e2.getValue());
写法三, 再优化
PriorityQueue<Map.Entry<Integer, Integer>> priorityQueue = new PriorityQueue<>(Comparator.comparingInt(Map.Entry::getValue));
写法3 是JAVA 8 里面最好的写法, 可以直接调用 comparator 里面的静态方法 comparingInt, 当然如果比较类型不是Int 而是String的话也可以调用相应的其他方法。
这里的写法最终得到的 priorityQueue 都是最小堆, 如果需要使用最大堆的话,在前两种写法里面要用e2.getValue()-e1.getValue().
当然,如果简单的想要直接用普通数据类型,比如 int 或者 String 类型的 priorityQueue 的最大堆, 也可以通过new 一个新的 Comparator 来完成。
附: PriorityQueue 的基本方法:
创建对象:
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
插入:
priorityQueue.add(1);
或者
priorityQueue.offer();
在源码里,PriorityQueue 的add() 方法直接调用了offer() 方法,返回类型都是 boolean。
查看堆顶元素,返回堆顶元素但不删除:
priorityQueue.peek();
或者
priorityQueue.element();
删除堆顶元素并返回:
priorityQueue.remove();
或者
priorityQueue.poll();
当然,PriorityQueue 还可以 删除特定元素,返回值是boolean
priorityQueue.remove(1);
这篇关于JAVA 中 类型是 Map 的 PriorityQueue 3种写法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23JAVA语音识别项目入门教程
- 2024-11-23Java云原生学习:从入门到实践
- 2024-11-22Java创业学习:初学者的全面指南
- 2024-11-22JAVA创业学习:零基础入门到实战应用教程
- 2024-11-22Java创业学习:从零开始的Java编程入门教程
- 2024-11-22Java对接阿里云智能语音服务学习教程
- 2024-11-22JAVA对接阿里云智能语音服务学习教程
- 2024-11-22Java对接阿里云智能语音服务学习教程
- 2024-11-22Java副业学习:零基础入门到实战项目
- 2024-11-22Java副业学习:零基础入门指南