Потому что вы использовали наследование вместо делегирования. Вы наследуете LinkedList, и единственное, что вы делаете, это определяете конструктор, который добавляет содержимое несортированного списка в новый, в соответствующем порядке. Но вы не переопределяете метод size
, поэтому этот метод наследуется от LinkedList, который не заботится о вашем внутреннем отсортированном списке и поэтому всегда возвращает 0.
Расширение коллекции в большинстве случаев является плохой идеей. В этом случае это особенно плохая идея, потому что невозможно иметь отсортированный LinkedList, который уважает API LinkedList. Предположим, ваш список содержит A, B и C, и вы звоните addFirst("Z")
. Где вы положите Z, если в начале ваш список больше не отсортирован. Если в конце вы не уважаете контракт addFirst
.
Просто используйте связанные списки (вместо их расширения) и сортируйте их. Вы могли бы просто сделать:
LinkedList list = new LinkedList(someUnsortedList);
Collections.sort(list); // now the list is sorted
list.addAll(someOtherList);
Collections.sort(list); // now both lists are merged, and the resulting list is sorted.