我试图基于优先级队列中的整数值而非名称(字符串)值出队。例如,应该在[John,1]之前拉[Sally,4]。因为4的优先级高于1。但是,按照我构造Queue的方式,它是从第一个变量(名称)按字母顺序轮询。谢谢,朝着正确方向迈出的任何一步。
package stackqueuewood;
import java.util.PriorityQueue;
import java.util.ArrayList;
public class StackQueueWood {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
people.add(person("Tom", 3));
people.add(person("Dick", 4));
people.add(person("Harry", 2));
PriorityQueue<String> pQ = new PriorityQueue<>();
pQ.addAll(people);
System.out.println("The current queue size is: " + pQ.size());
System.out.println("The current queue is: \n" + pQ);
System.out.println(pQ.peek());
pQ.poll();
System.out.println(pQ);
}
public static String person(String name, int priority){
return ("(" + name + ", " + priority + ")");
}
}
答案 0 :(得分:0)
创建两个新类来代表一个人,而不是将两个值合并为一个String
,并使用名称和优先级字段。然后,您可以使用PriorityQueue<Person>
并指定要使用的Comparator
(可能是Comparator.comparingInt(Person::getPriority)
)。
答案 1 :(得分:0)
您需要:
c.Add(key = "five", value = 5)
然后:
Comparator<String> orderIsdn = new Comparator<String>() {
//Your sorting method
}