我正在使用PriorityQueue
在我的代码中使用堆数据结构。我不想找到cost
最低的客户。客户的成本可能会在执行期间发生变化。所以我保留了一大堆所有客户。我正在尝试使用代码 - (输出在注释中显示)
PriorityQueue<Customer> pq = new PriorityQueue<>();
Customer c1 = new Customer(10);
Customer c2 = new Customer(20);
Customer c3 = new Customer(3);
Customer c4 = new Customer(40);
pq.add(c1);pq.add(c2);pq.add(c3);pq.add(c4);
System.out.println(pq.peek() == c3); //Prints true
c1.cost = 1;
System.out.println(pq.peek() == c1); //Prints false
虽然对象c1
的状态发生了变化,但是Heap没有得到Heapified。基本上我想要两行输出true
。我没有找到明确Heapifying the Heap的任何javadoc帮助。有人可以帮忙,我该怎么做/调整这个?
答案 0 :(得分:0)
更新后,您需要删除对象并将其重新插入PriorityQueue。优先级队列的工作原理是在插入新元素时将它们放在适当的位置,并且不考虑更新。