Rozważmy następujący kod:Wielkość kolejka priorytetowa zwiększa się, gdy przedmioty nie porównywalne dodaje
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
W ten kod to nieporównywalne obiekt jest najpierw dodawany do PriorityQueue
. Ten kod działa dobrze, as already answered here.
Następnie do tej kolejki dodawany jest drugi obiekt. Zgodnie z oczekiwaniami na PriorityQueue.add
Javadoc, ClassCastException
jest generowany, ponieważ drugi obiekt nie jest porównywalny z pierwszym.
Wydaje się jednak, że wielkość kolejki została zwiększona chociaż wyjątek: druga wydruk wyjścia rachunku 2 zamiast 1.
Czy takie zachowanie powinno? Jeśli tak, to jaka jest tego przyczyna i gdzie jest udokumentowana?