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ównywalneNie 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)Przeczytaj kod. Wyjście to:
Christopher 30posortowany 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)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 50sortowane 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];Zauważ, że zamiast,
Kolekcje.sort (al);jest,
Tablice.sort (ARR);Tym razem, ponieważ tablica nie jest tak naprawdę listą. Wyjście powinno być
Christopher 30wznoszący się według wieku. Jest to pod warunkiem, że korpusem metody CompompetO () jest:
public int Compareto (pracownik EMP)Gdyby było ciało,
public int Compareto (pracownik EMP)wówczas tablica zostanie sortowana zejście, aby doprowadzić do wyjścia:
Piotr 50Wniosek
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.