//siftUp()privatevoidsiftUp(intk, E x){while(k >0) {intparent=(k -1) >>>1;//parentNo = (nodeNo-1)/2,这里要注意下标是从0开始保证了这里的正确性Objecte=queue[parent];if(comparator.compare(x, (E) e) >=0)//调用比较器的比较方法,如果x>=e,breakbreak; queue[k] = e; k = ...
private void siftDown(int k, E x) { if(comparator != null) siftDownUsingComparator(k, x); else siftDownComparable(k, x); } 同样分为两种情况,代码类似,我们只看一种: private void siftDownComparable(int k, E x) { Comparable<? super E> key = (Comparable<? super E>)x; int half = s...
private void siftUp(int k, E x) { if (comparator != null) siftUpUsingComparator(k, x); else // 3.采用默认的比较器 siftUpComparable(k, x); } private void siftUpComparable(int k, E x) { Comparable<? super E> key = (Comparable<? super E>) x; while (k > 0) { // 4.将...
PriorityQueue(Commection<? extends E> c) PriorityQueue(Comparator<? Super E> comparator) PriorityQueue(PriorityQueue<? extends E> c) PriorityQueue(SortedSet<? extends E> c) 与Queue<E> 类似,PriorityQueue<E> 也不是同步的,因此在并发编程中应谨慎使用。但是,有一个同步的替代方案,称为 PriorityBlocking...
PriorityQueue(int initialCapacity,Comparator<? superE> comparator) 使用指定的初始容量创建一个PriorityQueue,并根据指定的比较器对元素进行排序。 PriorityQueue(PriorityQueue<? extendsE> c) 创建包含指定优先级队列元素的PriorityQueue。 PriorityQueue(SortedSet<? extendsE> c) ...
public PriorityQueue(int initialCapacity, Comparator<? super E> comparator) public PriorityQueue(Collection<? extends E> c) PriorityQueue是用堆实现的,堆物理上就是数组,与ArrayList类似,PriorityQueue同样使用动态数组,根据元素个数动态扩展,initialCapacity表示初始的数组大小,可以通过参数传入。对于默认构造方法,initial...
PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器comparator来排序其元素。 注意7:此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。 PriorityQueue的内部实现 ...
superE>comparator;} 可以看出PriorityQueue底层是基于数组实现的,使用Object[]数组存储元素,并且定义了...
PriorityQueue(int initialCapacity) 使用指定的初始容量创建一个 PriorityQueue,并根据其自然顺序来排序其元素(使用 Comparable)。 PriorityQueue(int initialCapacity, Comparator<? super E> comparator) 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器comparator来排序其元素。
*/publicPriorityQueue(Comparator<?superE>comparator){this(DEFAULT_INITIAL_CAPACITY,comparator);}/** * 使用指定容量创建一个优先级队列,并使用指定比较器进行排序。 * 但如果指定的容量小于1则会抛出异常 */publicPriorityQueue(int initialCapacity,Comparator<?superE>comparator){if(initialCapacity<1)thrownewIllega...