Jak piszesz porównywalne w Javie?

Jak piszesz porównywalne w Javie?
Przykładami list Java są; Wektor, stos, atrybutelist, arrayList i LinkedList. Klasa Java Collections ma przeciążone metody sortowania listy predefiniowanych obiektów. Klasa Java tablic ma przeciążone metody sortowania tablicy predefiniowanych obiektów.

Predykowane metody sort () to sortowanie predefiniowanych obiektów. A co z obiektami zdefiniowanymi przez użytkownika? Java ma interfejs o nazwie porównywalny. Interfejs to rodzaj klasy, której metody są deklaracje bez definicji (ciała). Zatem klasa musi być zaimplementowana z interfejsu, które należy zdefiniować (podane ciała). Z zaimplementowanej klasy obiekty można utworzyć od nazwy podanej przez programistę.

Java ma predefiniowaną porównywalną klasę. Metody sort () w kolekcjach i tablicach używają predefiniowanej klasy porównywalnej do sortowania predefiniowanych obiektów. Jednak w celu sortowania listy lub tablicy obiektów zdefiniowanych przez użytkownika programista musi zaimplementować (zdefiniowanie) klasy użytkownika z porównywalnego interfejsu. Ta klasa zaimplementowana przez użytkownika (zdefiniowana) umożliwia sortowanie obiektów zdefiniowanych przez użytkownika na liście lub tablicy. Tak więc predefiniowana porównywalna klasa umożliwia sortowanie predefiniowanych obiektów, podczas gdy porównywalna klasa zdefiniowana przez użytkownika umożliwia sortowanie obiektów zdefiniowanych przez użytkownika. Obiekty zdefiniowane przez użytkownika nie są literałami, więc klasa obiektów zdefiniowanych przez użytkownika potrzebuje własnej porównywalnej implementacji zdefiniowanej przez użytkownika.

W tym artykule ilustruje, jak pisać porównywalne w Javie.

Przykład klasy zdefiniowanej przez użytkownika

Klasa zdefiniowana przez użytkownika faktycznie implementuje porównywalny interfejs. Porównywalny interfejs ma tylko jedną metodę, czyli,

int Compareto (t o)

Jest albo zdefiniowany (biorąc pod uwagę ciało) do sortowania rosnącego lub zdefiniowanego w celu sortowania zstępującego. Zwraca negatywną liczbę całkowitą, zerową lub dodatnią liczbę całkowitą, ponieważ jej obiekt jest mniejszy niż, równy lub większy niż określony obiekt.

Ta klasa zainteresowań, zaimplementowana z porównywalnego interfejsu, jest klasą zdefiniowaną przez użytkownika z teraz zdefiniowaną metodą CompareTo (). Nie jest to jednak kompletna klasa zdefiniowana przez użytkownika. Może mieć własne inne metody i właściwości (pola), w zależności od programatora. Obiekty utworzone z tej klasy zaimplementowanej przez użytkownika będą obiektami listy lub tablicy do sortowania. Każdy obiekt ma tę samą metodę Compareto () w sortowaniu, która kontroluje sortowanie.

Przykładowa klasa

Poniższy kod pokazuje klasę zdefiniowaną przez użytkownika dla pracowników, z których obiekty (pracownicy) zostaną utworzone. Aby obiekty zostały sortowane, klasa pracownika implementuje porównywalny interfejs i określa (podaje ciał) metodę Compareto () jako specjalną metodę klasy.

Pracownik klasy wdraża porównywalne
String fname; int wiek;
Pracownik (string fname, int wiek)
Ten.fname = fname;
Ten.wiek = wiek;

public int Compareto (pracownik EMP)
if (wiek < emp.age)
zwrot -1;
inaczej, jeśli (wiek == emp.wiek)
powrót 0;
w przeciwnym razie
zwrot +1;

Nie ma tu prawdziwego obiektu dosłownego. Chodzi o to, aby uporządkować pracowników według wieku. Porównuje to również pracownika według wieku. I tak należy zdefiniować kompleks (). Ta definicja dotyczy sortowania rosnącego. W tej metodzie ciało (definicja), wiek i emp.wiek, patrz dwa różne elementy na liście lub tablicy. wiek odnosi się do elementu przed emp.wiek .

Odpowiednią metodą main () jest to:

public static void main (string [] args)
ArrayList al = nowy ArrayList();
glin.Dodaj (nowy pracownik („John”, 40)); glin.Dodaj (nowy pracownik („Peter”, 50));
glin.Dodaj (nowy pracownik („Christopher”, 30));
Kolekcje.sort (al);
dla (int i = 0; iSystem.na zewnątrz.println (al.Get (i).fname + " + al.Get (i).wiek);

Przeczytaj kod. Wyjście to:

Christopher 30
Jan 40
Piotr 50

posortowany wzrost, według wieku.

Sortowanie zstępujące

Powyższa definicja metody compareto () dotyczy wznoszenia. Aby to sortować, koduj to w następujący sposób:

public int Compareto (pracownik EMP)
if (wiek < emp.age)
zwrot +1;
inaczej, jeśli (wiek == emp.wiek)
powrót 0;
w przeciwnym razie
zwrot -1;

Zauważ, że < 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:

Piotr 50
Jan 40
Christopher 30

sortowane zejście, według wieku.

Porównywalne dla tablicy

Porównywalna klasa dla tablicy jest taka sama jak porównywalna klasa dla listy, jak wyjaśniono powyżej. Klasa jest programistą zaimplementowaną klasą, która implementuje porównywalny interfejs. Ta klasa zaimplementowana programista definiuje również metodę Compareto (), albo rosnąc lub malejący. Obiekty utworzone z tej klasy stają się obiektami dla tablicy. Zdefiniowana metoda Compareto () kontroluje ich sortowanie.

Poniższa główna metoda, sortuje szereg tych samych powyższych pracowników, wznoszący się:

Pracownik [] arr = nowy pracownik [3];
ARR [0] = nowy pracownik („John”, 40); ARR [1] = nowy pracownik („Peter”, 50);
ARR [2] = nowy pracownik („Christopher”, 30);
Tablice.sort (ARR);
dla (int i = 0; iSystem.na zewnątrz.println (arr [i].fname + " + arr [i].wiek);

Zauważ, że zamiast,

Kolekcje.sort (al);

jest,

Tablice.sort (ARR);

Tym razem, ponieważ tablica nie jest tak naprawdę listą. Wyjście powinno być

Christopher 30
Jan 40
Piotr 50

wznoszący się według wieku. Jest to pod warunkiem, że korpusem metody CompompetO () jest:

public int Compareto (pracownik EMP)
if (wiek < emp.age)
zwrot -1;
inaczej, jeśli (wiek == emp.wiek)
powrót 0;
w przeciwnym razie
zwrot +1;

Gdyby było ciało,

public int Compareto (pracownik EMP)
if (wiek < emp.age)
zwrot +1;
inaczej, jeśli (wiek == emp.wiek)
powrót 0;
w przeciwnym razie
zwrot -1;

wówczas tablica zostanie sortowana zejście, aby doprowadzić do wyjścia:

Piotr 50
Jan 40
Christopher 30

Wniosek

Zdefiniowana klasa porównywalna umożliwia sortowanie predefiniowanych obiektów, podczas gdy porównywalna klasa zdefiniowana przez użytkownika umożliwia sortowanie obiektów zdefiniowanych przez użytkownika. Obiekty zdefiniowane przez użytkownika nie są literałami, więc klasa obiektów zdefiniowanych przez użytkownika potrzebuje własnej porównywalnej implementacji zdefiniowanej przez użytkownika.

Klasa. Porównywalny interfejs ma metodę CompompetO (), którą należy zdefiniować w klasie do sortowania wstępnego lub zstępującego (odwrotnego). To właśnie ta metoda kontroluje sortowanie na liście lub tablicy.

Do sortowania tablicy można użyć tej samej porównywalnej klasy do sortowania listy. Klasa jest programistą zaimplementowaną klasą, która implementuje porównywalny interfejs. Ta klasa zaimplementowana programista definiuje również metodę Compareto (), albo rosnąc lub malejący. Obiekty utworzone z tej klasy stają się obiektami tablicy.