gpt4 book ai didi

java - Java问题中的优先级队列排序

转载 作者:行者123 更新时间:2023-11-29 06:40:55 27 4
gpt4 key购买 nike

我想制作一个节点优先级队列,其中节点的优先级是它们的频率。但是输出不包含正确位置的第一个元素,其余的都在正确的位置。

    import java.util.*;
class node implements Comparable<node>{
char key;
int freq;
node(){}
node(char k,int f){
key=k;
freq=f;
}
public int compareTo(node n){
if(freq>n.freq)return 1;
return 0;
}
}

public class test{
public static void main(String[] args){
node x=new node('x',4);
node a=new node('a',2);
node b=new node('b',1);
node c=new node('c',7);
PriorityQueue<node> q = new PriorityQueue<node>();

q.offer(a);
q.offer(b);
q.offer(c);
q.offer(x);

while(!q.isEmpty()){
node d=q.poll();
System.out.println(d.key+" "+d.freq);
}
}
}

输出:

    a 2
b 1
x 4
c 7

顺序不应该是 b , a, x, c谢谢。

最佳答案

你的比较器是错误的:if freq < n.freq , 它返回 0 而不是返回负数。

代码应该是

return Ints.compare(freq, n.freq); // with Guava

return Integer.valueOf(freq).compareTo(Integer.valueOf(n.freq)) // with plain Java

if (freq > n.freq) return 1;
if (freq < n.freq) return -1;
return 0;

关于java - Java问题中的优先级队列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12299997/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com