Hvordan skriver du sammenlignbar i Java?

Hvordan skriver du sammenlignbar i Java?
Eksempler på Java -lister er; Vektor, stabel, attributelist, arraylist og linkedlist. Java -samlingsklassen har overbelastede metoder for å sortere en liste over forhåndsdefinerte objekter. Java Arrays -klassen har overbelastede metoder for å sortere en rekke forhåndsdefinerte objekter.

De forhåndsdefinerte sort () -metodene er å sortere forhåndsdefinerte objekter. Hva med brukerdefinerte objekter? Java har et grensesnitt kalt sammenlignbart. Et grensesnitt er en slags klasse hvis metoder er erklæringer uten definisjoner (kropper). Så en klasse må implementeres fra et grensesnitt for metodene som skal defineres (gitte kropper). Fra den implementerte klassen kan objekter bli instantiert fra et navn gitt av programmereren.

Java har en forhåndsdefinert sammenlignbar klasse. Sorter () -metodene i samlinger og matriser bruker den forhåndsdefinerte sammenlignbare klassen for å sortere forhåndsdefinerte objekter. For å sortere en liste eller en rekke brukerdefinerte objekter, må imidlertid programmereren implementere (definere) en bruker sammenlignbar klasse fra det sammenlignbare grensesnittet. Denne brukeren implementert (definert) klasse muliggjør sortering av brukerdefinerte objekter i en liste eller en rekke. Så en forhåndsdefinert sammenlignbar klasse muliggjør sortering av forhåndsdefinerte objekter, mens en brukerdefinert sammenlignbar klasse muliggjør sortering av brukerdefinerte objekter. Brukerdefinerte objekter er ikke bokstaver, så en klasse brukerdefinerte objekter trenger sin egen brukerdefinerte sammenlignbar implementering.

Denne artikkelen illustrerer hvordan du skriver sammenlignbar i Java.

Eksempel på brukerdefinert klasse

Den brukerdefinerte klassen implementerer faktisk det sammenlignbare grensesnittet. Det sammenlignbare grensesnittet har bare en metode, som er,

int sammenligning (t o)

Det er enten definert (gitt et legeme) å sortere stigende eller definert for å sortere synkende. Den returnerer et negativt heltall, eller null, eller et positivt heltall, ettersom objektet er mindre enn, lik eller større enn det spesifiserte objektet.

Denne klassen av interesse, implementert fra det sammenlignbare grensesnittet, er den brukerdefinerte klassen med nå en definert sammenligning () -metode. Dette er ikke en komplett brukerdefinert klasse, skjønt. Det kan ha andre metoder og egenskaper (felter) av seg selv, avhengig av programmereren. Objektene som er instantiert fra denne brukerens implementerte klassen, vil være objektene på listen eller matrisen som skal sorteres. Hvert objekt har samme sammenligning () -metode i sortering, som styrer sortering.

Eksempelklasse

Følgende kode viser en brukerdefinert klasse for ansatte, hvorfra objekter (ansatte) vil bli instantiert. For at objektene skal sorteres, implementerer klasseansatte sammenlignbart grensesnitt og definerer (gir en kropp) sammenligningsmetoden () som en spesiell metode i klassen.

klasseansatt implementerer sammenlignbar
Streng fname; int alder;
Ansatt (String fname, int alder)
dette.fname = fname;
dette.alder = alder;

public int compareto (ansatt emp)
hvis (alder < emp.age)
return -1;
ellers hvis (alder == emp.alder)
retur 0;
ellers
returnerer +1;

Det er ingen reelt objekt bokstavelig her. Intensjonen er å måtte sortere de ansatte etter alder, stigende. Dette sammenligner også den ansatte etter alder. Og slik må sammenligningen () defineres. Denne definisjonen er for å sortere stigende. I denne metoden, kropp (definisjon), alder og emp.Alder, se to forskjellige elementer på listen eller matrisen. Alder refererer til elementet før EMP.alder .

En passende hoved () -metode for dette er:

public static void main (String [] args)
ArrayList Al = ny ArrayList();
al.Legg til (ny ansatt ("John", 40)); al.Legg til (ny ansatt ("Peter", 50));
al.Legg til (ny ansatt ("Christopher", 30));
Samlinger.sorter (al);
for (int i = 0; iSystem.ute.Println (al.Få (i).fname + " + al.Få (i).alder);

Les gjennom koden. Utgangen er:

Christopher 30
John 40
Peter 50

sortert stigende, etter alder.

Sortering av synkende

Ovennevnte sammenligning () metodedefinisjon, er for stigende. For å få det til å sortere nedstiger, kode det som følger:

public int compareto (ansatt emp)
hvis (alder < emp.age)
returnerer +1;
ellers hvis (alder == emp.alder)
retur 0;
ellers
return -1;

Noter det < 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

sortert synkende, etter alder.

Sammenlignbar for matrise

En sammenlignbar klasse for en matrise er den samme som en sammenlignbar klasse for en liste, som forklart ovenfor. Klassen er en programmerer implementert en klasse som implementerer det sammenlignbare grensesnittet. Denne programmereren implementerte klassen definerer også sammenligningsmetoden, enten stigende eller synkende. Objektene som er instantiert fra denne klassen blir gjenstandene for matrisen. Den definerte sammenligningen () -metoden styrer deres sortering.

Følgende hovedmetode, sorterer en rekke de samme ansatte, stigende:

Ansatt [] arr = ny ansatt [3];
arr [0] = ny ansatt ("John", 40); arr [1] = ny ansatt ("Peter", 50);
arr [2] = ny ansatt ("Christopher", 30);
Matriser.sorter (arr);
for (int i = 0; iSystem.ute.Println (arr [i].fname + " + arr [i].alder);

Legg merke til at i stedet for,

Samlinger.sorter (al);

det er,

Matriser.sorter (arr);

denne gangen, fordi en matrise egentlig ikke er en liste. Utgangen skal være

Christopher 30
John 40
Peter 50

Stigende, etter alder. Dette er under forutsetning av at kroppen til sammenligningsmetoden er:

public int compareto (ansatt emp)
hvis (alder < emp.age)
return -1;
ellers hvis (alder == emp.alder)
retur 0;
ellers
returnerer +1;

Hvis kroppen var,

public int compareto (ansatt emp)
hvis (alder < emp.age)
returnerer +1;
ellers hvis (alder == emp.alder)
retur 0;
ellers
return -1;

Da vil matrisen bli sortert nedover for å resultere i utgangen:

Peter 50
John 40
Christopher 30

Konklusjon

Den forhåndsdefinerte sammenlignbare klassen muliggjør sortering av forhåndsdefinerte objekter, mens den brukerdefinerte sammenlignbare klassen muliggjør sortering av brukerdefinerte objekter. Brukerdefinerte objekter er ikke bokstaver, så en klasse brukerdefinerte objekter trenger sin egen brukerdefinerte sammenlignbar implementering.

Interesseklassen, hvis objekter skal bli instantiert, må implementere det sammenlignbare grensesnittet. Det sammenlignbare grensesnittet har metodesammenligning (), som må defineres i klassen for stigende eller synkende (omvendt) sortering. Det er denne metoden som kontrollerer sortering i listen eller matrisen.

Den samme sammenlignbare klassen for å sortere en liste kan brukes til å sortere en matrise. Klassen er en programmerer implementert en klasse som implementerer det sammenlignbare grensesnittet. Denne programmereren implementerte klassen definerer også sammenligningsmetoden, enten stigende eller synkende. Objektene instantiert fra denne klassen blir gjenstandene for matrisen.