PriorityQueue, содержащий «Пары» в обратном порядке по номерам Java - PullRequest
0 голосов
/ 27 марта 2011

Я пытаюсь создать приоритетную очередь, которая хранит свои элементы (пары целых чисел) в обратном порядке.Я нашел суровые советы на сайте, но в каждом случае он давал один и тот же неправильный порядок.

public class Pair implements Comparable {
public Integer name;
public Integer value;
public Pair(int name, int value) {
    this.name = name;
    this.value = value;

}
public int getname(){
    return name;
}    
public int getvalue() {
    return value;
}

public int compare(Pair o1, Pair o2) {
    Pair a1 = (Pair)o1;
    Pair a2 = (Pair)o2;
    if(a1.value>a2.value) {
        return 1;
    }
    else if(a1.value<a2.value) {
        return -1;
    }
    return 0;

}

@Override
public int hashCode() {
    int hash = 3;
    return hash;
}
@Override
public boolean equals(Object o) {
    Pair a2 = (Pair)o;
    return this.name == a2.name && this.value == a2.value;
}
public int compareTo(Object o) {
    Pair a2 = (Pair)o;
    if(this.value>a2.value) {
        return 1;
    }
    else if(this.value<a2.value) {
        return -1;
    }
    return 0;

}

}

Если я использую конструктор "PriorityQueue ()", он дает правильное естественное упорядочение.Спасибо за ваше время, Марк

Ответы [ 2 ]

3 голосов
/ 27 марта 2011

Из документов для PriorityQueue.iterator():

Возвращает итератор для элементов в этой очереди.Итератор не возвращает элементы в каком-либо определенном порядке.

Если вы хотите получить их в приоритетном порядке, продолжайте вызывать poll(), пока не вернет null:

Pair pair;
while((pair = pq.poll()) != null) {
    System.out.println(pair.value);
}

Это печатает 58, 55, 23, 15, как вы искали.

0 голосов
/ 27 марта 2011

вместо «return a2.value.compareTo (a1.value);»Вы должны напрямую использовать ((a2.value> a1.value)? 1: ((a2.value == a1.value)? 0: -1));

...