如何将单个映射条目添加到优先级队列

时间:2016-01-27 18:40:02

标签: java priority-queue

目前我必须添加整个地图,如最后一行所示。

PriorityQueue<Map.Entry<String, Integer>> sortedCells = new PriorityQueue<Map.Entry<String, Integer>>(3, new mem());
    Map<String,Integer> pn = new HashMap<String,Integer>();
    pn.put("hello", 1);
    pn.put("bye", 3);
    pn.put("goodbye", 8);
    sortedCells.addAll(pn.entrySet());

如果我只想添加

怎么办?
("word" 5)

如果我这样做

sortedCells.add("word",5)

我得到一个参数错误。

如何添加单个元素?

1 个答案:

答案 0 :(得分:2)

您应该添加multiDexEnabled个对象而不只是Map.Entry ,因为优先级队列的通用类型为("word", 5) 。在这种情况下,您应该创建自己的Map.Entry<String, Integer>类:

Map.Entry

在您的代码中,您现在可以致电:

final class MyEntry implements Map.Entry<String, Integer> {
    private final String key;
    private Integer value;

    public MyEntry(String key, Integer value) {
        this.key = key;
        this.value = value;
    }

    @Override
    public String getKey() {
        return key;
    }

    @Override
    public Integer getValue() {
        return value;
    }

    @Override
    public Integer setValue(Integer value) {
        Integer old = this.value;
        this.value = value;
        return old;
    }
}

如果您不想实施自己的参赛作品,可以使用AbstractMap.SimpleEntry

sortedCells.add(new MyEntry("word",5));