@Override boolean remove(int index) { assert index >= 0; assert index < N; int bucket = index >>> 6; long old = data[bucket]; long now = old & ~(1L << index); if (old == now) { return false; } if (0 == now) { lookup &= ~(1L << bucket); } size--; modCount++; data[bucket] = now; if (min == index) { min = nextSetBit(min + 1); } return true; }
private static <E> PriorityQueue<E> newPriorityQueue(List<? extends E> universe, Map<E, Integer> ordinalMap) { if (universe.size() <= SmallPriorityQueue.MAX_CAPACITY) { return new SmallPriorityQueue<E>(universe, ordinalMap); } if (universe.size() <= MediumPriorityQueue.MAX_CAPACITY) { return new MediumPriorityQueue<E>(universe, ordinalMap); } return new LargePriorityQueue<E>(universe, ordinalMap); } }