如何将单个映射条目添加到优先级队列
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));
目前我必须添加整个地图,如最后一行所示。
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));