gpt4 book ai didi

java - PriorityQueue 返回自定义比较器的错误排序?

转载 作者:行者123 更新时间:2023-11-29 03:51:44 25 4
gpt4 key购买 nike

我将优先级(从 0 到 3)与用户 ID 结合起来,并使用比较器对优先级队列进行排序。主要函数和比较器如下

public class PriQueTest {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
Comparator<String> comparator = new StringPriComparator();
PriorityQueue<String> queue =
new PriorityQueue<String>(3, comparator);
queue.add("3"+"128763711");
queue.add("2"+"128763712");
queue.add("0"+"128763718");
queue.add("1"+"128763713");
queue.add("3"+"128763714");
queue.add("2"+"128763715");
queue.add("2"+"128763716");
queue.add("3"+"128763717");

while (queue.size() != 0)
{
System.out.println( (queue.remove().substring(1)));
}

}
public static class StringPriComparator implements Comparator<String>
{
@Override
public int compare(String x, String y)
{
if (Integer.parseInt(x.substring(0, 1)) > Integer.parseInt(y.substring(0, 1)))
{
return -1;
}
if (Integer.parseInt(x.substring(0, 1)) < Integer.parseInt(y.substring(0, 1)))
{
return 1;
}
return 0;

}
}


}

优先级排序正确,但同一优先级用户排序不正确

上面代码的输出是

128763711
128763714
128763717
128763716
128763712
128763715
128763713
128763718

预期输出如下

128763711
128763714
128763717
128763712*
128763715*
128763716*
128763713
128763718

此处 ID 为 128763712 的用户在 ID 为 128763716 的用户之前发出优先级为 2 的请求如果有什么不正确或我的比较器有误,有什么想法吗?

最佳答案

你的比较器只看第一个数字,它工作正常。由于您不会在比较器中对其余值做任何进一步的操作,因此对于第一个数字相等的任何内容,您都会得到优先级队列中的任何顺序。

您的比较器还需要 2 个案例,在前两次检查之后,您比较值的其余部分,如果第一个值小于或大于第二个值,则返回正确的值。

关于java - PriorityQueue 返回自定义比较器的错误排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445773/

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