private void heapifyDown(Entry<E> entry) {
    Entry<E> currentEntry = entry;
    Entry<E> bestEntry = null;

    do {
      bestEntry = currentEntry;

      Entry<E> leftEntry = leftChild(currentEntry);
      if (leftEntry != null) {
        if (compare(bestEntry, leftEntry) < 0) {
          bestEntry = leftEntry;
        }
      }

      Entry<E> rightEntry = rightChild(currentEntry);
      if (rightEntry != null) {
        if (compare(bestEntry, rightEntry) < 0) {
          bestEntry = rightEntry;
        }
      }

      if (bestEntry != currentEntry) {
        // Swap min and current
        swap(bestEntry, currentEntry);
        // at start of next loop, we set currentIndex to largestIndex
        // this indexation now holds current, so it is unchanged
      }
    } while (bestEntry != currentEntry);
    // System.err.println("Done with heapify down");
    // verify();
  }