java map 写法_JAVA 中 类型是 Map 的 PriorityQueue 3种写法

刷题的时候发现不是很熟悉JAVA 里的 heap(堆) 即 PriorityQueue 的用法,记录一下 PriorityQueue> 的基本用法:

写法一,直接 new 一个Comparator:

PriorityQueue> priorityQueue = new PriorityQueue<>(

new Comparator>() {

public int compare(Map.Entry e1, Map.Entry e2) {

return e1.getValue() - e2.getValue();

}

});

写法二, 对写法一 优化:

PriorityQueue> priorityQueue = new PriorityQueue<>(

(e1, e2) -> e1.getValue() - e2.getValue());

写法三, 再优化

PriorityQueue> 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 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);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值