gpt4 book ai didi

java - PriorityQueue 顺序不正确 JAVA

转载 作者:行者123 更新时间:2023-11-30 06:17:19 25 4
gpt4 key购买 nike

我确实有一个实现 Comparable 的 User 类。在我将用户列表添加到 PriorityQueue<User> 之后,他们应该被 scores 优先考虑,但由于某些原因他们没有。你能帮我弄清楚为什么用户没有在我的 Queue 中排序吗?

更新:

我正在通过轮询元素来访问队列。 prioritisedUsers.poll() 它总是带有随机分数并尊重顺序。

PriorityQueue<User> prioritisedUsers = userPriorityStrategy.computeUserPriority(users);

while(!prioritisedUsers.isEmpty()){
System.out.println(prioritisedUsers.poll().getPriorityScore());
}

输出:

0.35036433736768735
0.6619121139678329
0.09520067929838127
0.4013591573863
0.6704568389588227
0.5989900926939181
0.7320779721160738

感谢您的帮助!

public class User implements Comparable<User>{

private long id;
private String fistName;
private String lastName;
private double priorityScore;

public User (long id, String firstName, String lastName){
this.id = id;
this.fistName = firstName;
this.lastName = lastName;
}

public double getPriorityScore(){
return this.priorityScore;
}

public void setPriorityScore(double priorityScore){
this.priorityScore = priorityScore;
}

public long getId(){
return this.id;
}

public String getFistName(){
return this.fistName;
}

public String getLastName(){
return this.lastName;
}

public int compareTo(User o) {
return (int) (this.getPriorityScore() - o.getPriorityScore());
}
}


public PriorityQueue<User> computeUserPriority(List<User> users) {
PriorityQueue<User> prioritisedUsers = new PriorityQueue<User>(users.size());
for (User user : users) {
user.setPriorityScore(rand.nextDouble());
prioritisedUsers.add(user);
}
return prioritisedUsers;
}

最佳答案

我不太确定您对 (int) 的转换是否正常...因为转换为 int 会隐式删除任何小数。

如果我没记错的话,试试类似的方法

public int compareTo(User object) {
if (this.getPriorityScore() < object.getPriorityScore())
return -1;
if (this.getPriorityScore() == object.getPriorityScore())
return 0;
return 1;
}

或者更简单地:

public int compareTo(User o) {
return Double.compare(this.getPriorityScore(), o.getPriorityScore());
}

关于java - PriorityQueue 顺序不正确 JAVA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25963088/

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