private void heapDown(E e) {

		int i = indexOf(e);
		int left = left(i), right = right(i);

		int target;
		if (left >= size)
			return;
		if (right >= size)
			target = left;
		else
			target = Compare(heap.get(right), heap.get(left)) ? right : left;

		if (Compare(heap.get(target), e)) {
			Swap(target, i);
			heapDown(e);
		} else
			return;
	}