Page 1 sur 1

problème comparateur PriorityQueue

Publié : 24 déc. 2017 18:56
par sinouhe
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

Re: problème comparateur PriorityQueue

Publié : 25 déc. 2017 12:26
par Douin
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());
    }
}