Come si scrive comparabile in java?

Come si scrive comparabile in java?
Esempi di elenchi di Java sono; Vector, Stack, Attributelist, ArrayList e LinkedList. La classe di raccolte Java ha metodi sovraccarichi per ordinare un elenco di oggetti predefiniti. La classe Array Java ha metodi sovraccarichi per ordinare una serie di oggetti predefiniti.

I metodi Ord () predefiniti sono di ordinare gli oggetti predefiniti. Che dire degli oggetti definiti dall'utente? Java ha un'interfaccia chiamata comparabile. Un'interfaccia è una specie di classe i cui metodi sono dichiarazioni senza definizioni (corpi). Quindi, una classe deve essere implementata da un'interfaccia per definire i metodi (dati i corpi). Dalla classe implementata, gli oggetti possono essere istanziati da un nome dato dal programmatore.

Java ha una classe comparabile predefinita. I metodi Ord () nelle raccolte e nelle array utilizzano la classe comparabile predefinita per ordinare gli oggetti predefiniti. Tuttavia, per ordinare un elenco o una matrice di oggetti definiti dall'utente, il programmatore deve implementare (definire) una classe comparabile dell'utente dall'interfaccia comparabile. Questo utente ha implementato la classe (definita) abilita l'ordinamento di oggetti definiti dall'utente in un elenco o array. Pertanto, una classe comparabile predefinita consente l'ordinamento di oggetti predefiniti, mentre una classe comparabile definita dall'utente consente l'ordinamento di oggetti definiti dall'utente. Gli oggetti definiti dall'utente non sono letterali, quindi una classe di oggetti definiti dall'utente necessita della propria implementazione comparabile definita dall'utente.

Questo articolo illustra come scrivere comparabili in Java.

Esempio di classe definita dall'utente

La classe definita dall'utente implementa effettivamente l'interfaccia comparabile. L'interfaccia comparabile ha un solo metodo, che è,

int comparazione (t o)

È definito (dato un corpo) ordinare ascendente o definito per ordinare la discesa. Restituisce un numero intero negativo, o zero o un numero intero positivo, poiché il suo oggetto è inferiore a, uguale o maggiore dell'oggetto specificato.

Questa classe di interesse, implementata dall'interfaccia comparabile, è la classe definita dall'utente con ora un metodo comparatore () definito. Questa non è una classe completa definita dall'utente, tuttavia. Può avere altri metodi e proprietà (campi) propri, a seconda del programmatore. Gli oggetti istanziati da questa classe implementati dell'utente saranno gli oggetti dell'elenco o dell'array da ordinare. Ogni oggetto ha lo stesso metodo comparatore () nell'ordinamento, che controlla l'ordinamento.

Classe di esempio

Il seguente codice mostra una classe definita dall'utente per i dipendenti, da cui gli oggetti (dipendenti) saranno istanziati. Affinché gli oggetti vengano ordinati, il dipendente di classe implementa l'interfaccia comparabile e definisce (fornisce un corpo) il metodo comparatore () come metodo speciale della classe.

Classe Implement implementa comparabile
String fname; Int Age;
Employee (String fname, int age)
Questo.fname = fname;
Questo.età = età;

public int comparazione (dipendente emp)
Se (età < emp.age)
restituzione -1;
altrimenti if (age == EMP.età)
restituzione 0;
altro
restituire +1;

Non c'è vero oggetto letterale qui. L'intenzione è di dover ordinare i dipendenti per età, ascendente. Questo sta anche confrontando il dipendente per età. E quindi il confronto () deve essere definito. Questa definizione è per l'ordinamento ascendente. In questo metodo, corpo (definizione), età ed emp.età, fare riferimento a due diversi elementi nell'elenco o nell'array. L'età si riferisce all'elemento prima dell'EMP.età .

Un metodo principale () adatto per questo è:

public static void main (string [] args)
Lista di array al = nuovo arraylist();
al.Aggiungi (nuovo dipendente ("John", 40)); al.Aggiungi (nuovo dipendente ("Peter", 50));
al.Aggiungi (nuovo dipendente ("Christopher", 30));
Collezioni.sort (al);
per (int i = 0; iSistema.fuori.println (al.Ottieni (i).fname + " + al.Ottieni (i).età);

Leggi il codice. L'output è:

Christopher 30
John 40
Peter 50

ordinato ascendente, per età.

Ordinamento discendente

La definizione del metodo di confronto sopra () è per ascendente. Per farlo ordinare in declino, codifica come segue:

public int comparazione (dipendente emp)
Se (età < emp.age)
restituire +1;
altrimenti if (age == EMP.età)
restituzione 0;
altro
restituzione -1;

Notare che < has not been changed. However, -1 returned has been changed to +1; and +1 returned has been changed to -1. With this, the output for the above specific list is:

Peter 50
John 40
Christopher 30

ordinato discendente, per età.

Comparabile per l'array

Una classe comparabile per un array è la stessa di una classe comparabile per un elenco, come spiegato sopra. La classe è un programmatore implementato una classe che implementa l'interfaccia comparabile. Questo programmatore implementato la classe definisce anche il metodo comparato (), ascendente o discendente. Gli oggetti istanziati da questa classe diventano gli oggetti per l'array. Il metodo definito comparazione () controlla il loro smistamento.

Il seguente metodo principale, ordina un array dello stesso sopra i dipendenti, ascendente:

Dipendente [] arr = new dipendente [3];
arr [0] = nuovo dipendente ("John", 40); arr [1] = nuovo dipendente ("Peter", 50);
arr [2] = nuovo dipendente ("Christopher", 30);
Array.sort (arr);
per (int i = 0; iSistema.fuori.println (arr [i].fname + " + arr [i].età);

Nota che invece di,

Collezioni.sort (al);

c'è,

Array.sort (arr);

Questa volta, perché un array non è proprio un elenco. L'output dovrebbe essere

Christopher 30
John 40
Peter 50

ascendente, per età. Ciò è nella condizione che il corpo del metodo comparazione () sia:

public int comparazione (dipendente emp)
Se (età < emp.age)
restituzione -1;
altrimenti if (age == EMP.età)
restituzione 0;
altro
restituire +1;

Se il corpo era,

public int comparazione (dipendente emp)
Se (età < emp.age)
restituire +1;
altrimenti if (age == EMP.età)
restituzione 0;
altro
restituzione -1;

quindi l'array sarebbe stato ordinato scendendo per provocare l'output:

Peter 50
John 40
Christopher 30

Conclusione

La classe comparabile predefinita consente l'ordinamento di oggetti predefiniti, mentre la classe comparabile definita dall'utente consente l'ordinamento di oggetti definiti dall'utente. Gli oggetti definiti dall'utente non sono letterali, quindi una classe di oggetti definiti dall'utente necessita della propria implementazione comparabile definita dall'utente.

La classe di interesse, i cui oggetti devono essere istanziati, deve implementare l'interfaccia comparabile. L'interfaccia comparabile ha il metodo confronto (), che deve essere definito nella classe per l'ordinamento ascendente o discendente (inverso). È questo metodo che controlla l'ordinamento nell'elenco o nell'array.

La stessa classe comparabile per l'ordinamento di un elenco può essere utilizzata per l'ordinamento di un array. La classe è un programmatore implementato una classe che implementa l'interfaccia comparabile. Questo programmatore implementato la classe definisce anche il metodo comparato (), ascendente o discendente. Gli oggetti istanziati da questa classe diventano gli oggetti dell'array.