Bug Comparator with PriorityBlockingQueue ? - Java - Programmation
MarshPosté le 07-10-2008 à 19:06:51
Bonjour,
Je voudrais créer une Queue dont les éléments sont ordonnés par rapport à leur priorité. J'ai créé un comparateur d'entiers tout simple mais celui-ci n'ordonne pas correctement ma liste. Avec le comparateur et le code test ci-dessous j'obtiens pour résultat 1, 0, 1 au lieu de 1, 1, 0.
Est-ce qu'il existe un bug connu pour l'utilisation de la classe Comparator ou bien est-ce que j'ai mal codé ? (sans l'utilisation de ma classe Comparator l'ordonnancement est bon ...)
Voici mon Comparateur :
public class NewComp implements Comparator<Integer> {
/** * default constructor */ public NewComp() { }
/** * Compare the priority level of two Integer * elements in argument. * * @return <pre> * 1 if this priority level is lower * -1 if this priority level is higher * 0 if the priority levels are equals * </pre> {@inheritDoc} */ public int compare(Integer app1, Integer app2) {
Marsh Posté le 07-10-2008 à 19:06:51
Bonjour,
Je voudrais créer une Queue dont les éléments sont ordonnés par rapport à leur priorité. J'ai créé un comparateur d'entiers tout simple mais celui-ci n'ordonne pas correctement ma liste.
Avec le comparateur et le code test ci-dessous j'obtiens pour résultat 1, 0, 1 au lieu de 1, 1, 0.
Est-ce qu'il existe un bug connu pour l'utilisation de la classe Comparator ou bien est-ce que j'ai mal codé ? (sans l'utilisation de ma classe Comparator l'ordonnancement est bon ...)
Voici mon Comparateur :
public class NewComp implements Comparator<Integer> {
/**
* default constructor
*/
public NewComp() {
}
/**
* Compare the priority level of two Integer
* elements in argument.
*
* @return <pre>
* 1 if this priority level is lower
* -1 if this priority level is higher
* 0 if the priority levels are equals
* </pre> {@inheritDoc}
*/
public int compare(Integer app1, Integer app2) {
if (app1.intValue() > app2.intValue())
{
return -1;
}
else if (app1.intValue() < app2.intValue())
{
return 1;
}
else
{
return 0;
}
}
public boolean equals(Integer app1, Integer app2) {
boolean result = false;
if (app1.intValue() == app2.intValue()) {
result = true;
}
return result;
}
}
Voici ma classe test :
public class TestComparator extends PriorityBlockingQueue<Integer>{
public TestComparator(int capa, Comparator<Integer> comp)
{
//super();
super(capa, comp);
}
/**
* default constructor
*/
public static void main (String[] args) {
TestComparator test = new TestComparator(1, new NewComp());
test.offer(new Integer(0));
test.offer(new Integer(1));
test.offer(new Integer(1));
System.out.println("end" );
}
}
Merci par avance pour votre aide,
Eva