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

How to add a single map entry to 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)

我收到参数错误。

如何添加单个元素?

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

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;
    }
}

在您的代码中,您现在可以调用:

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

如果您不想实现自己的条目,您可以使用 AbstractMap.SimpleEntry:

sortedCells.add(new AbstractMap.SimpleEntry<String, Integer>("word",5));