Как бих сортирал моя свързан с java (не колекции LinkedList) списък по тип елемент по азбучен ред?

Създадох общ свързан списък в java (не вградения) и имам клас LinkedList, клас ListInterface, клас Node, клас Dvd и клас DvdManager. Целта ми е да мога да добавям DVD-та към свързания списък и да ги разпечатвам по азбучен ред. Успях успешно да напиша кода за добавяне, премахване и добавяне на копия на DVD към свързания списък. Не мога обаче да разбера как да отпечатам списъка по азбучен ред. Мога да отпечатам списъка с помощта на следния код, но той не се отпечатва по азбучен ред въз основа на заглавието на елемента:

if (movies.isEmpty()) {
  System.out.println("The list is empty.");
} else {
  for (int i = 1; i <= movies.length(); i++) {
    System.out.println(movies.get(i).getTitle());                                                 
  }
}

Как да накарам списъка с общи типове да се отпечата по азбучен ред? Ето моите клас файлове, ако искате да погледнете (сложих ги на pastebin, защото са дълги):DvdManager, Dvd, LinkedList, ListInterface и възел. Благодаря.

Редактиране: разбрах го с помощта на сортиране на вмъкване:

public void add(Dvd item) {
  DvdNode addThis = new DvdNode(item);
  if(head == null) {
    head = addThis;
  } else if(item.getTitle().compareToIgnoreCase(head.getItem().getTitle()) < 0) {
      addThis.setNext(head);
      head = addThis;
    } else {
        DvdNode temp;
        DvdNode prev;
        temp = head.getNext();
        prev = head;
        while(prev.getNext() != null && item.getTitle().compareToIgnoreCase
            (prev.getNext().getItem().getTitle()) > 0) {
          prev = temp;
          temp = temp.getNext();
        }
        addThis.setNext(temp);
        prev.setNext(addThis);
      }
}

person jdc987    schedule 04.11.2013    source източник
comment
Как изглежда вашият LinkedList клас? И какви обекти съхранявате в списъка?   -  person Paul Samsotha    schedule 04.11.2013
comment
FYI movies.get(i) е много неефективен. Ако имате свързан списък, помислете за преминаване през връзките с помощта на movies.next вместо това.   -  person dkatzel    schedule 04.11.2013
comment
Можете да сортирате вашия LinkedList преди отпечатване, или по време на вмъкване на елементите, или по-късно. Но това зависи от причината, поради която използвате LinkedList. В почти всички случаи, когато се използва LinkedList, причината е да се запази определен ред, който не може да бъде възстановен по-късно чрез сортиране. Имаме нужда от повече информация за вашия LinkedList и причината за вашия LinkedList   -  person mschenk74    schedule 04.11.2013


Отговори (1)


Има поне 2 начина:

  1. поддържайте свързания си списък в ред на сортиране, по този начин вашият код за печат, който сте посочили по-горе, просто ще работи. Това би накарало вмъкванията да вземат O(n).

  2. Ако не сте против използването на класовете на Java Collection по време на частта за печат, можете да добавите всичките си заглавия на филми към колекция и след това да ги сортирате (или да използвате сортирана колекция, която ще поддържа реда на сортиране, докато добавяте подобно на #1). Ако тръгнете по този път, ще трябва да внедрите Comparator

person dkatzel    schedule 04.11.2013
comment
Благодаря. Най-накрая го разбрах, като използвах сортиране чрез вмъкване. - person jdc987; 08.11.2013