将键和值添加到优先级队列中并按Java键中的键排序

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.


  • 创建一个拥有Stringint作为其成员的类.

    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)

希望这可以帮助.


Ank*_*rma 9

使用 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)