Come ordinare un elenco collegato in Java

March 4

Una lista concatenata è uno dei principali tipi di strutture di dati nel mondo della programmazione. Si tratta di una disposizione di nodi che contiene sia i dati e riferimenti che puntano al nodo successivo. Per ordinare una lista collegata in Java, c'è una classe lista collegata che funziona con il quadro Collezioni che implementa algoritmi come l'ordinamento.

istruzione

Ordinare una lista collegata in Java

1 Dichiarare la lista collegata con la creazione di un nuovo oggetto LinkedList e assegnando a una variabile LinkedList. LinkedList eredita dalla classe List generica, in modo che qualsiasi metodo che accetta un elenco accetta anche un oggetto LinkedList.
""LinkedList l = new LinkedList();""

2 Aggiungere oggetti dello stesso tipo (ad esempio interi) all'elenco. Questi possono essere oggetti di qualsiasi tipo, ma per ordinare una lista collegata, dovrebbero essere tutte dello stesso tipo.

3 Utilizzare il metodo List.addFirst per inserire nuovi oggetti per l'inizio della lista, in modo che tutto ciò che gli oggetti si aggiungono sarà in ordine inverso. Se si desidera aggiungerli alla fine della lista, utilizzare il metodo List.addLast. ""list.addFirst(1);
list.addFirst(3);
list.addFirst(2);""
""list.addFirst(1);
list.addFirst(3);
list.addFirst(2);""

4 Utilizzare un Iterator per scorrere l'elenco, e stamparli prima e dopo per vedere che cosa il metodo di ordinamento sta facendo. ""for( Iterator i = list.iterator(); i.hasNext(); ) {
System.out.println(i.next());
}""
""for( Iterator i = list.iterator(); i.hasNext(); ) {
System.out.println(i.next());
}""

Ordina per Default e comparatori personalizzati

5 Ordinare l'elenco con il comparatore di default. Un comparatore è un oggetto che confronta due oggetti. L'oggetto predefinito comparatore utilizza l'operatore Minore di, in modo che la lista verrà ordinata in ordine crescente. Per ordinare l'elenco, utilizzare il metodo statico Collections.sort. ""Collections.sort(list);""

6 Ordinare l'elenco con un comparatore personalizzato scrivendo una classe che implementa l'interfaccia di confronto e passa ad essa un'istanza come un argomento per ordinare. La classe che implementa solo comparatore deve implementare il metodo singolo "confrontare." ""public class GreaterThan implements Comparator {@Override
public int compare(Object arg0, Object arg1) {
int x = (Integer)arg0;
int y = (Integer)arg1;
if(x > y) {
return -1;
} else if(x == y) {
return 0;
} else {
return 1;
}
}}""
""public class GreaterThan implements Comparator {@Override
public int compare(Object arg0, Object arg1) {
int x = (Integer)arg0;
int y = (Integer)arg1;
if(x > y) {
return -1;
} else if(x == y) {
return 0;
} else {
return 1;
}
}}""

7 Utilizzare la chiamata a Collections.sort passando una nuova istanza di GreaterThan come secondo argomento. Dal momento che gli oggetti che sono maggiori saranno ordinati prima, l'elenco verrà ordinato in ordine decrescente invece di ordine crescente. In alternativa, se si sta ordinare un elenco di oggetti di una classe personalizzata ti hai scritto, che classe può implementare l'interfaccia Comparable invece di utilizzare una classe comparatore separata. ""Collections.sort(list, new GreaterThan());""

Consigli e avvertenze

  • È problematico utilizzare un numero intero per scorrere per ciclo e il metodo List.size (). L'iterazione di una lista collegata è un'operazione costosa computazionalmente. Quando si utilizza l'operatore di indice (come l [2]), come si farebbe con una matrice, Java deve iterare l'elenco fino a raggiungere indice 2. Per le piccole liste, questo non è un problema, ma con qualcosa di più grande, utilizzando l'operatore indice per iterare diventa molto costoso risorse.
  • Non importa come l'oggetto List è implementata, dal momento che LinkedList implementa la stessa interfaccia.
  • Il metodo di confronto deve restituire -1 se arg0 deve essere ordinato prima arg1, 0 se deve essere ordinato ugualmente e 1 se arg1 deve essere ordinato prima arg0.
  • L'oggetto iteratore assicura che ogni nodo della lista viene visitata una sola volta. Questa è una cosa importante da ricordare, come nodi in visita inutilmente possono abusare strutture di dati, fino al punto che il programma verrà eseguito a malapena.