den folgenden Code vor:Größe von Priorityqueue erhöht, wenn nicht vergleichbare Objekte hinzugefügt werden
import java.util.PriorityQueue;
public class Test {
public static void main(String argv[]) {
PriorityQueue<A> queue = new PriorityQueue<>();
System.out.println("Size of queue is " + queue.size()); // prints 0
queue.add(new A()); // does not throw an exception
try {
queue.add(new A()); // this time, an exception is thrown
} catch (ClassCastException ignored) {
System.out.println("An exception was thrown");
}
System.out.println("Size of queue is " + queue.size()); // prints 2
}
}
class A { } // non-comparable object
In diesem Code eine nicht vergleichbare Aufgabe wird zuerst zu einem PriorityQueue
. Dieser Code funktioniert gut, as already answered here.
Dann wird ein zweites Objekt zu dieser Warteschlange hinzugefügt. Wie erwartet per PriorityQueue.add
Javadoc wird eine ClassCastException
geworfen, weil das zweite Objekt nicht mit dem ersten vergleichbar ist.
Allerdings scheint es, dass die Größe der Warteschlange erhöht wurde, obwohl eine Ausnahme ausgelöst wurde: die zweite print-Anweisung Ausgänge 2 statt 1
Ist dieses Verhalten erwartet? Wenn ja, was ist der Grund dafür und wo ist es dokumentiert?