use*_*188 7 java priority-queue
我试图接受一个字符串列表,并将它们添加到具有键和值的优先级队列中.Key是单词,值是单词的字符串值.然后我需要先用最高的字符串值对队列进行排序.优先级队列不允许我添加2个值.
public static List<String> pQSortStrings(List<String> strings) {
PriorityQueue<String, Integer> q = new PriorityQueue<>();
for (int x = 0; x < strings.size(); x++) {
q.add(strings.get(x),calculateStringValue(strings.get(x)));
}
return strings;
}
Run Code Online (Sandbox Code Playgroud)
Tan*_*til 15
PriorityQueue可以在每个节点中存储单个对象.所以你要做的事情不能像现在这样完成.
但是你可以在一个类中组合两个对象然后使用PriorityQueue.
您可能需要通过实现接口来提供Comparator或依赖自然顺序Comparable.
创建一个拥有String和int作为其成员的类.
public class Entry {
private String key;
private int value;
// Constructors, getters etc.
}
Run Code Online (Sandbox Code Playgroud)实现Comparable接口和委托比较String.
public class Entry implements Comparable<Entry> {
private String key;
private int value;
public Entry(String key, int value) {
this.key = key;
this.value = value;
}
// getters
@Override
public int compareTo(Entry other) {
return this.getKey().compareTo(other.getKey());
}
}
Run Code Online (Sandbox Code Playgroud)PriorityQueue使用这个类构建.
PriorityQueue<Entry> q = new PriorityQueue<>();
Run Code Online (Sandbox Code Playgroud)添加如下元素.
q.add(new Entry(strings.get(x), calculateStringValue(strings.get(x))));
Run Code Online (Sandbox Code Playgroud)希望这可以帮助.
使用 Java-8
PriorityQueue<Map.Entry<String, Integer>> queue = new PriorityQueue<>(Map.Entry.comparingByValue(Comparator.reverseOrder()));
Run Code Online (Sandbox Code Playgroud)
添加新条目
queue.offer(new AbstractMap.SimpleEntry<>("A", 10));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17450 次 |
| 最近记录: |