„Comparable vs Comparator“ programoje „Java“.

„Java“ suteikia dvi sąsajas objektams rūšiuoti naudojant klasės duomenų narius:

  1. Palyginamas
  2. Palyginimas

Palyginamos sąsajos naudojimas

Palyginamas objektas gali palyginti save su kitu objektu. Pati klasė turi įgyvendinti java.lang.Palyginama sąsaja, kad būtų galima palyginti jos atvejus.
Apsvarstykite filmų klasę, kurioje yra tokių narių kaip įvertinimas, pavadinimas, metai. Tarkime, kad norime rūšiuoti filmų sąrašą pagal išleidimo metus. Galime įdiegti palyginamąją sąsają su Movie klase ir nepaisome palyginimo sąsajos metodo palyginimo().

Java




// A Java program to demonstrate use of Comparable> import> java.io.*;> import> java.util.*;> // A class 'Movie' that implements Comparable> class> Movie> implements> Comparable> {> > private> double> rating;> > private> String name;> > private> int> year;> > // Used to sort movies by year> > public> int> compareTo(Movie m)> > {> > return> this> .year - m.year;> > }> > // Constructor> > public> Movie(String nm,> double> rt,> int> yr)> > {> > this> .name = nm;> > this> .rating = rt;> > this> .year = yr;> > }> > // Getter methods for accessing private data> > public> double> getRating() {> return> rating; }> > public> String getName() {> return> name; }> > public> int> getYear() {> return> year; }> }> // Driver class> class> Main> {> > public> static> void> main(String[] args)> > {> > ArrayList list => new> ArrayList();> > list.add(> new> Movie(> 'Force Awakens'> ,> 8.3> ,> 2015> ));> > list.add(> new> Movie(> 'Star Wars'> ,> 8.7> ,> 1977> ));> > list.add(> new> Movie(> 'Empire Strikes Back'> ,> 8.8> ,> 1980> ));> > list.add(> new> Movie(> 'Return of the Jedi'> ,> 8.4> ,> 1983> ));> > Collections.sort(list);> > System.out.println(> 'Movies after sorting : '> );> > for> (Movie movie: list)> > {> > System.out.println(movie.getName() +> ' '> +> > movie.getRating() +> ' '> +> > movie.getYear());> > }> > }> }>

Išvestis

Movies after sorting : Star Wars 8.7 1977 Empire Strikes Back 8.8 1980 Return of the Jedi 8.4 1983 Force Awakens 8.3 2015 

Tarkime, kad norime rūšiuoti filmus pagal jų įvertinimą ir pavadinimus. Kai kolekcijos elementą padarome palyginamą (įdiegus jį Comparable), gauname tik vieną galimybę įgyvendinti palyginimo() metodą. Sprendimas naudojamas Palyginimas.

Komparatoriaus naudojimas

Skirtingai nuo „Comparable“, „Comparator“ yra išorinis elemento tipas, kurį lyginame. Tai atskira klasė. Sukuriame kelias atskiras klases (kuriose įdiegtas Comparator), kad galėtume palyginti skirtingus narius.
Kolekcijos klasė turi antrąjį sort() metodą ir jai reikia Comparator. Rūšiuoti () metodas iškviečia palyginimą () objektams rūšiuoti.

Norėdami palyginti filmus pagal įvertinimą, turime atlikti 3 dalykus:

  1. Sukurkite klasę, kuri įgyvendina Comparator (taigi ir palyginimo () metodą, kuris atlieka darbą, kurį anksčiau atliko palyginimasTo ()).
  2. Padarykite Comparator klasės egzempliorių.
  3. Iškvieskite overloaded sort() metodą, suteikdami jam sąrašą ir klasės, kuri įgyvendina Comparator, egzempliorių.

Java




// A Java program to demonstrate Comparator interface> import> java.io.*;> import> java.util.*;> // A class 'Movie' that implements Comparable> class> Movie> implements> Comparable {> > private> double> rating;> > private> String name;> > private> int> year;> > // Used to sort movies by year> > public> int> compareTo(Movie m)> > {> > return> this> .year - m.year;> > }> > // Constructor> > public> Movie(String nm,> double> rt,> int> yr)> > {> > this> .name = nm;> > this> .rating = rt;> > this> .year = yr;> > }> > // Getter methods for accessing private data> > public> double> getRating() {> return> rating; }> > public> String getName() {> return> name; }> > public> int> getYear() {> return> year; }> }> // Class to compare Movies by ratings> class> RatingCompare> implements> Comparator {> > public> int> compare(Movie m1, Movie m2)> > {> > if> (m1.getRating() return -1; if (m1.getRating()>m2.getRating()) return 1; kitaip grąžinti 0; } } // Klasė palyginimui Filmai pagal pavadinimą class PavadinimasPalyginti įgyvendina Comparator { public int palyginti(Movie m1, Movie m2) { return m1.getName().compareTo(m2.getName()); } } // Tvarkyklės klasė Main { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(new Movie('Force Awakens', 8.3, 2015)); list.add(new Movie('Žvaigždžių karai', 8.7, 1977)); list.add( new Movie('Imperija atmuša', 8.8, 1980)); list.add( new Movie('Jedi sugrįžimas', 8.4, 1983)); // Rūšiuoti pagal įvertinimą : (1) Sukurti // įvertinimo objektą Palyginti // (2) Skambinti Collections.sort // (3) Spausdinti Rūšiuotų sąrašą System.out.println('Rūšiuota pagal įvertinimą'); ĮvertinimasPalyginti įvertinimasPalyginti = new ĮvertinimasPalyginti(); Kolekcijos.rūšiuoti(sąrašas, įvertinimasPalyginti); for (Filmo filmas : sąrašas) System.out.println(movie.getRating() + ' ' + movie.getName() + ' ' + movie.getYear()); // Iškvieskite perkrautą rūšiavimo metodą su RatingCompare // (Trys tie patys veiksmai, kaip ir aukščiau) System.out.println(' Rūšiuota pagal pavadinimą'); VardasPalyginti vardąPalyginti = new NamePalyginti(); Kolekcijos.rūšiuoti(sąrašas, pavadinimasPalyginti); for (Filmo filmas : sąrašas) System.out.println(movie.getName() + ' ' + movie.getRating() + ' ' + movie.getYear()); // Naudoja Palyginama, kad būtų galima rūšiuoti pagal metus System.out.println(' Rūšiuota pagal metus'); Kolekcijos.rūšiuoti(sąrašas); for (Filmo filmas : sąrašas) System.out.println(movie.getYear() + ' ' + movie.getRating() + ' ' + movie.getName() + ' '); } }>>

>   

Kas yra Mano kompiuteris?