请考虑以下代码:
import java.util.PriorityQueue;
public class Test {
public static void main(String argv[]) {
PriorityQueue 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
在此代码中,首先将不可比较的对象添加到PriorityQueue.这段代码工作正常,as already answered here.
然后,将第二个对象添加到此队列.按照PriorityQueue.add Javadoc的预期,抛出ClassCastException,因为第二个对象与第一个对象不可比.
但是,尽管抛出了异常,但似乎队列的大小增加了:第二个print语句输出2而不是1.
这种行为有望吗?如果是这样,这背后的原因是什么?它在哪里记录?