Comportement inattendu avec priorityqueey supprime: pourquoi la comparaison n'est-elle pas utilisée?

StackOverflow https://stackoverflow.com/questions/8906772

Question

J'essaie d'utiliser la file d'attente prioritaire, mais la Suppor () ne fonctionne pas: mon code:

PriorityQueue<OwnClass> pq=new PriorityQueue<OwnClass>();
OwnClass a=new OwnClass(1);
OwnClass b=new OwnClass(2);
OwnClass c=new OwnClass(3);
pq.add(a);
pq.add(b);
pq.add(c);
System.out.println("head:"+pq.peek());
pq.remove(new OwnClass(1));
System.out.println(pq.peek());

Et l'implémentation de classe:

class OwnClass implements Comparable{

    int x;

    public OwnClass(int x){
        this.x=x;
    }

    public int compareTo(Object arg0) {

        OwnClass a=(OwnClass) arg0;
        if(a.x>this.x)
            return -1;
        if(a.x<x)
            return 1;
        return 0;
    }

    public String toString(){
        return ""+x;        
    }
}

Je pense que la sortie finale de sortie doit être 2, car je supprime le «1» ajouté. La compareto () doit être utilisée par la file d'attente prioritaire Support () mais elle ne semble pas être le cas. Qu'est ce que je fais mal? Je sais que PQ.Remove (a) fonctionnera, mais mon code devrait également fonctionner

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top