我做了以下测试,看看如何
PriorityBlockingQueue<String> pq = new PriorityBlockingQueue<>(2);
pq.put("Sing");
pq.put("Sing2");
pq.put("Sing3");
pq.put("Sing4");
pq.put("Sing10");
pq.put("Sing11");
pq.put("Sing12");
pq.put("Sing13");
for (String s1: pq)
{
System.out.print(s1 +" ");
}
我得到的结果是:
Sing Sing10 Sing11 Sing13 Sing2 Sing3 Sing12 Sing4
现在,如果在构建时没有指定比较器, API应该如何按自然顺序对它们进行排序。但是,您可以看到结果根本没有排序。
其次,我设置的初始容量是2,如果实际上没有设置边界,为什么会有这样的选项?重点是什么?我知道 api 指定它是一个无界的优先级队列,但是如果构造函数不能设置任何边界,为什么还要让构造函数获取初始容量呢?
所以基本上我有两个问题:
1)为什么上面发布的结果的顺序不遵循元素的自然顺序?
2)拥有一个带有参数“初始容量”的构造函数的目的是什么,实际上并没有设置界限。在LinkedBlockingQueue中这是合理的,因为它设置了边界,但它不会发生在 PriorityBlockingQueue 中。
提前致谢。