Java 中 PriorityQueue 如何转换成 Map
巴扎黑
巴扎黑 2017-04-17 11:40:02
[Java讨论组]

现在有一个 PriorityQueue,里面的元素是 Map 的 Entry,如下:

PriorityQueue<Entry<String, int>> priorityQueue = new PriorityQueue<Entry<String, int>>();
Map<String, int> map = new HashMap<String, int>();

我想要用这些 Entry 建一个 HashMap。现在的实现方法如下:

for(Entry<String, int> entry: priorityQueue)
  map.put(entry.getKey(), entry.getValue());

后来我写了另一种实现:

map.putAll((Map)priorityQueue);

但编译器提示这种类型转换不能保证正确性。

我想请问一下,有其他的效率能高过我当前实现方法的实现方式吗?

巴扎黑
巴扎黑

全部回复(1)
迷茫

首先:Entrykey值value值都必须是类型,而你定义的value是int基本数据类型。这个错误编译器会给出提示。正确的定义如下:

        PriorityQueue<Entry<String, Integer>> priorityQueue = new PriorityQueue<Entry<String, Integer>>();
        Map<String, Integer> map = new HashMap<String, Integer>();

然后是队列PriorityQueue转换成集合Map,这样做存在一个问题是:当队列中存在相同的对象时,转换到Map中这个对象只会有一个,下面的put动作可以解释这个原因:

map.put(entry.getKey(), entry.getValue());

最后解决问题的办法,你可以常识将优先级队列PriorityQueue换成TreeMap,两者都有自定义排序的功能。同时在转换时也就很容易了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号