I'm trying to store object to piority queue, each object has its own value. So, I want to get the smallest value when using poll()
method. But it doesn't work like I expected.
I add n object with id from 0 to n - 1, then set value for each object.
when I poll the first element, it's always the object with id 0? no matter what value it is. I don't know why ? here is the code:
class Element implements Comparable<Element>{
int id;
int value;
public Element(int id) {
this.id = id;
}
@Override
public int compareTo(Element e) {
return Integer.compare(value, e.value);
}
}
//main
Element[] elements = new Element[n];
Queue<Element> piorityQueue = new PriorityQueue<>();
for(int i = 0; i < n; ++i){
elements[i] = new Element(i);
}
for(int i = 0; i < n; ++i){
piorityQueue.add(elements[i]);
}
elements[1].value = 4;
elements[2].value = 3;
elements[3].value = 2;
elements[0].value = 5;
elements[4].value = 1;
elements[5].value = 0;
while(!piorityQueue.isEmpty()){
Element e = piorityQueue.poll();
System.out.println(e.id + " " + e.value);
}
the wrong output here:
0 5
5 0
4 1
3 2
2 3
1 4
please, can someone help me this?