для этого класса, удалите функцию очереди приоритета, не работает должным образом при внедрении Aljgo dijkstra's. Это класс, я создал для сортировки элементов в Priority Queue.Though очередь приоритета удаление минимального элемент правильно, это удалить метод (объект о) не удаления элементов правильноФункция удаления приоритета очереди не работает
public class IntegerArray implements Comparable<IntegerArray> {
public double[] a;
IntegerArray(double x,double y){
a= new double[2];
a[0]=x;
a[1]=y;
}
public boolean equals(IntegerArray x){
if(this.a[0]==x.a[0] & this.a[1] ==x.a[1]){
return true;
}
else return false;
}
public int compareTo(IntegerArray x){
if(this.a[1] > x.a[1]){
return 1;
}
else if(this.a[1] < x.a[1]){
return -1;
}
else return 0;
}
/// //// это код алгоритма Dijsktra, где приоритетная очередь используется
for (int i = 0; i < graph.get((int) node).size(); i++) {
alt = (int) (dist[(int) node] + graph.get((int) node).get(i).weight);
if (alt < dist[ graph.get((int) node).get(i).vertex]) {
temp1.a[0]=graph.get(node).get(i).vertex;
temp1.a[1]=dist[graph.get(node).get(i).vertex];
System.out.println("temp1" +" "+ temp1.a[0]+ " "+ temp1.a[1]);
Q.remove(temp1); //it is not removing though the object instance is present in the queue
dist[graph.get(node).get(i).vertex] = alt;
pred[graph.get(node).get(i).vertex] = node;
temp1.a[1]=dist[graph.get(node).get(i).vertex];
System.out.println("temp1" +" "+ temp1.a[0]+ " "+ temp1.a[1]);
Q.add(temp1);
}
Вам необходимо переопределить функцию 'int hashCode()'. – parakmiakos
Можете ли вы вставить, какой вывод вы видите на консоли при запуске программы и какие элементы присутствуют в вашей очереди? @parakmiakos я не думаю, что hashcode поможет здесь, то есть не используется PriorityQueue – SMA
, он создает (насколько я вижу) новый объект 'temp1', а затем вызывает' remove (temp1) '. Я думаю, ему нужно переопределить hashCode, потому что он в основном просит удалить из очереди объект с теми же значениями, что и другой, а не с той же ссылкой. – parakmiakos