J'ai écrit un comparateur personnalisé pour comparer mes classes de nœuds, mais la file d'attente de priorité java ne renvoie pas mes éléments dans le bon ordre.Java: PriorityQueue retourne une commande incorrecte du comparateur personnalisé?
Voici mon comparateur:
public int compare(Node n1, Node n2){
if (n1.getF() > n2.getF()){
return +1;
}
else if (n1.getF() < n2.getF()){
return -1;
}
else { // equal
return 0;
}
}
Où getf retourne un double. Cependant après avoir inséré plusieurs noeuds dans la file d'attente prioritaire, je les imprimer à l'aide:
while(open.size() > 0) {
Node t = (Node)(open.remove());
System.out.println(t.getF());
}
qui se traduit par:
6.830951894845301
6.830951894845301
6.0
6.0
5.242640687119285
7.4031242374328485
7.4031242374328485
8.071067811865476
Toutes les idées pourquoi il en est ainsi? Mon comparateur est-il mauvais? Merci.
Mike
Quelle classe Java est votre "file d'attente prioritaire java" (j'imagine PriorityQueue) et comment la construisez-vous? – Gray
java.util.PriorityQueue, je suppose? – Ceilingfish
Ne répond pas à votre question, mais j'ai remarqué que vous pourriez simplifier votre comparateur à: 'return Double.compare (n1.getF(), n2.getF());' –