problème comparateur PriorityQueue

Programmation Avancée

Modérateur : Douin

sinouhe
Messages : 7
Inscription : 15 oct. 2017 20:05

problème comparateur PriorityQueue

Message par sinouhe » 24 déc. 2017 18:56

Bonjour,

je ne comprends pas un fonctionnement de la classe PriorityQueue.
Dans la question 3 j'instancie bien un PriorityQueue avec le comparateur fournit :
private PriorityQueue<Integer> Queue;

public PriorityQueueImpl(int capacity){
super(capacity);
Queue = new PriorityQueue(capacity,comparator);
}

Lorsque j'appel la méthode add sur cette PriorityQueue les éléments sont classés dans un ordre correct au TP.
Par contre dès que j’utilise la méthode peek() ou remove() sur cette PriorityQueue et que ensuite je veux insérer un nouvelle Integer l'ordre n'est plus respecté comme ci le comparateur ne fonctionnait plus.

Pourriez vous m'aider car je suis totalement bloqué pour continuer.

merci

Douin
Messages : 368
Inscription : 18 mars 2009 15:46

Re: problème comparateur PriorityQueue

Message par Douin » 25 déc. 2017 12:26

Bonjour,

J'ai décoré ma réponse d'une petite classe de test qui pourrait vous aider, bonne file d'attente à priorité

Code : Tout sélectionner

import java.util.*;

public class TestPriorityQueue extends junit.framework.TestCase{
 

    public void testPriorityQueue(){
        PriorityQueue<Integer> q = new PriorityQueue<Integer>();
        q.offer(3);q.offer(2);q.offer(5);
        assertEquals(2,q.poll().intValue());
        assertEquals(3,q.poll().intValue());
        assertEquals(5,q.poll().intValue());
        assertTrue(q.isEmpty());
    }
    
    public void testPriorityQueueReverse(){
        Comparator<Integer> comparator= 
          new Comparator<Integer>(){
              public int compare(Integer i1, Integer i2){
                return i2.compareTo(i1);
            }
          };
        PriorityQueue<Integer> q = new PriorityQueue<Integer>(comparator);
        assertEquals(comparator, q.comparator());
        q.offer(3);q.offer(2);q.offer(5);
        assertEquals(5,q.poll().intValue());
        assertEquals(3,q.poll().intValue());
        assertEquals(2,q.poll().intValue());
        assertTrue(q.isEmpty());
    }
}

Répondre

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 1 invité