Я потратил несколько минут, проверяя ваш код на наличие ошибок, но не нашел ни одного.
Я бы сказал, что до тех пор, пока не появится кто-то умнее или более усердно работающий, вы должны попробовать отладить это самостоятельно. Если у вас есть IDE, такая как Eclipse, вы можете пошагово пройти по коду, наблюдая за значениями переменных; если нет, вы можете вставить операторы печати в нескольких местах и вручную проверить, что вы видите, с тем, что вы ожидали.
ОБНОВЛЕНИЕ I
Я скопировал твой код и проверил его. Помимо того, что он сортируется в порядке убывания (что может не соответствовать тому, что вы хотели), он отлично работал для выборки из 0, 1 и 10 случайных узлов. Так в чем же проблема?
ОБНОВЛЕНИЕ II
До сих пор догадываюсь, что может означать «он не полностью сортирует записи». Возможно, вы ожидаете лексикографическую сортировку (то есть «a» перед «B»), и это не соответствует плану для слов со смешанным верхним / нижним регистром. Решением в этом случае является использование метода String
compareToIgnoreCase(String str)
.