Comparable vs Comparator in Java
Fลbb kรผlรถnbsรฉg az รถsszehasonlรญthatรณ รฉs az รถsszehasonlรญtรณ kรถzรถtt Java
- รsszehasonlรญthatรณ Java egy objektum, amellyel รถsszehasonlรญthatja magรกt egy mรกsik objektummal, mรญg a Comparator egy olyan objektum, amely kรผlรถnbรถzล osztรกlyokba tartozรณ objektumokat hasonlรญt รถssze.
- รsszehasonlรญthatรณ biztosรญtja a
compareTo()az elemek rendezรฉsรฉnek mรณdja Java, mรญg a Comparator acompare()az elemek rendezรฉsรฉnek mรณdja Java. - Hasonlรณ interfรฉsz talรกlhatรณ benne
java.langcsomagban, mรญg a Comparator interfรฉsz benne vanjava.utilcsomag. - A Comparable egyetlen rendezรฉsi sorozatot, mรญg a Comparator tรถbb rendezรฉsi sorozatot biztosรญt.
- A Comparator hatรกssal van az eredeti osztรกlyra, mรญg a Comparator nem az eredeti osztรกlyra.

Itt elemeztem az รถsszehasonlรญthatรณ รฉs a Comparator kรถzรถtti kรผlรถnbsรฉget, รฉs รกtfogรณan รฉrtรฉkelem azok elลnyeit รฉs hรกtrรกnyait.
Amiben รถsszehasonlรญthatรณ Java?
Hasonlรณ in Java olyan tรกrgy, amely รถsszehasonlรญtja magรกt egy mรกsik tรกrggyal. Segรญt az egyรฉni objektumok listรกjรกnak rendezรฉsรฉben. A Java.lang.Az รถsszehasonlรญthatรณ felรผletet egy osztรกlynak kell megvalรณsรญtania, hogy รถsszehasonlรญthassa pรฉldรกnyait. Az รถsszehasonlรญthatรณ interfรฉszt megvalรณsรญtรณ objektumok tรถmbje automatikusan sorba rendezลdik Arrays.sort รฉs a Collections.sort mรณd.
Az รsszehasonlรญtรกsban hasznรกlt mรณdszer
Szeretnรฉk kiemelni egy fontos mรณdszert, amelyet gyakran hasznรกlok a Comparable felรผleten:
รsszehasonlรญtani():
A CompareTo() metรณdus termรฉszetes rendezรฉst hajt vรฉgre egy karakterlรกncon. A termรฉszetes rendezรฉs jelentรฉse az objektumra รฉrvรฉnyes rendezรฉsi sorrend, pl. az egรฉsz szรกmok rendezรฉsรฉnek numerikus sorrendje, a String betลฑrendje stb.
A szintaxisa CompareTo() a mรณdszer a kรถvetkezล:
int compareTo(T obj)
A fenti szintaxisban a T az รถsszehasonlรญtandรณ objektumok tรญpusรกt jelรถli.
CompareTo() mรณdszer รถsszehasonlรญtja az objektumot T obj-val.
output:
- 0-t ad vissza, ha az รฉrtรฉkek egyenlลek.
- Ha az objektum รฉrtรฉke alacsonyabb, akkor ez a metรณdus negatรญv รฉrtรฉket ad vissza.
- Ha az objektumnak nagyobb az รฉrtรฉke, akkor pozitรญv รฉrtรฉket ad vissza.
Pรฉlda รถsszehasonlรญtรกsra in Java
A kรถvetkezล program a Java egy รถsszehasonlรญthatรณ pรฉlda kรฉt karakter, โaโ รฉs โbโ รถsszehasonlรญtรกsรกt mutatja be. Az โaโ karakter รกbรฉcรฉ sorrendben โbโ elรฉ kerรผl.
Ezรฉrt a kimenet -1. A โbโ karakter az โaโ utรกn kรถvetkezik รกbรฉcรฉ sorrendben. Ezรฉrt a kimenet 1. Az โaโ รฉs โbโ karakterek egyenรฉrtรฉkลฑek. Ezรฉrt a kimenet 0.
public class Sample_String {
public static void main(String[] args) {
String str_Sample = "a";
System.out.println("Compare To 'a' b is : " + str_Sample.compareTo("b"));
str_Sample = "b";
System.out.println("Compare To 'b' a is : " + str_Sample.compareTo("a"));
str_Sample = "b";
System.out.println("Compare To 'b' b is : " + str_Sample.compareTo("b"));
}
}
teljesรญtmรฉny
Compare To 'a' b is : -1 Compare To 'b' a is : 1 Compare To 'b' b is : 0
Miben van รถsszehasonlรญtรณ Java?
รsszehasonlรญtรณ in Java egy objektum a kรผlรถnbรถzล osztรกlyokhoz tartozรณ objektumok รถsszehasonlรญtรกsรกra. Az รถsszehasonlรญtรณ interfรฉsz be Java a felhasznรกlรณ รกltal definiรกlt osztรกlyok objektumainak rendezรฉsรฉre is szolgรกl. Kรฉt fontos รถsszehasonlรญtรณ interfรฉsz mรณdszert tartalmaz, amelyek az รถsszehasonlรญtรกs (Object obj1, Object obj2) รฉs az egyenlลk (Object element) nรฉven ismertek.
A Comparatorban hasznรกlt mรณdszer
Gyakorlatomban gyakran tรกmaszkodom az รถsszehasonlรญtรณ felรผlet alรกbbi kritikus mรณdszereire:
รsszehasonlรญtรกs():
Compare() lehetลvรฉ teszi az objektumok megrendelรฉsรฉt. Ehhez lรฉtre kell hozni egy osztรกlyt, amely egy รถsszehasonlรญtรณ felรผletet valรณsรญt meg. Ezt kรถvetลen felรผl kell รญrnia az รถsszehasonlรญtรกsi mรณdszert.
A szintaxis a compare() a mรณdszer a kรถvetkezล:
compare(Object obj1, Object obj2)
A fenti szintaxisban az obj1 รฉs az obj2 kรฉt olyan objektum, amelyeket รถssze kell hasonlรญtani az รถsszehasonlรญtรกs() metรณdussal. compare() mรณdszer.
output:
- Negatรญv egรฉsz szรกmot ad vissza, ha az elsล argumentum kisebb, mint a mรกsodik.
- Nullรกt ad vissza, ha az elsล argumentum รฉs a mรกsodik argumentum egyenlล.
- Ez a mรณdszer pozitรญv egรฉsz szรกmot adhat vissza, ha az elsล argumentum nagyobb, mint a mรกsodik.
Biztosรญtania kell, hogy a kapcsolat tranzitรญv legyen. Pรฉldรกul ((hasonlรญtsa รถssze(a, b)>0) && (hasonlรญtsa รถssze(b, c)>0)), ami azt jelenti, hogy รถsszehasonlรญtsa(a, c)>0.
Pรฉlda รถsszehasonlรญtรกsra in Java
Az alรกbbiakban Java รถsszehasonlรญtรณ pรฉlda, 6 van vรกltozรณk. โxโ, โyโ, โpโ, โqโ, โrโ รฉs โsโ. A kimenet -1, mint az โxโ รฉrtรฉke, a 20 kisebb, mint az โyโ, 30. A kimenet 0, mert a โpโ รฉrtรฉke, 40 egyenlล โqโ รฉrtรฉkรฉvel, 40 .
import java.lang.Integer;
public class example {
public static void main(String args[])
{
int x = 20;
int y = 30;
// as 10 less than 20,
// Output will be a value less than zero
System.out.println(Integer.compare(x, y));
int p = 40;
int q = 40;
// as 30 equals 30,
// Output will be zero
System.out.println(Integer.compare(p, q));
int r = 20;
int s = 7;
// as 15 is greater than 8,
// Output will be a value greater than zero
System.out.println(Integer.compare(r, s));
}
}
output:
-1 0 1
Egyenlล():
Equals() ellenลrzi, hogy a szรกmobjektum egyenlล-e az argumentumkรฉnt รกtadott objektummal vagy sem.
A szintaxis a equals() a mรณdszer a kรถvetkezล:
public boolean equals(Object o)
Ez a metรณdus kรฉt paramรฉtert igรฉnyel: 1) bรกrmely objektumot รฉs 2) egy visszatรฉrรฉsi รฉrtรฉket. Igazat ad vissza, ha az รกtadott argumentum nem null, รฉs egy hasonlรณ tรญpusรบ objektum, amely azonos numerikus รฉrtรฉkkel rendelkezik.
Pรฉlda az egyenlล mรณdszerre:
Az alรกbbi pรฉldรกban a nรฉgy vรกltozรณt fogom รถsszehasonlรญtani egymรกssal. Hรกrom vรกltozรณ integer tรญpusรบ, egy pedig rรถvid tรญpusรบ. Az elsล eredmรฉny hamis, mivel p รฉrtรฉke, amely 5, nem egyenlล q รฉrtรฉkรฉvel, amely 20.
A mรกsodik eredmรฉny igaz, mert a p รฉs r vรกltozรณ รฉrtรฉke megegyezik, ami 5. Vรฉgรผl a kimenet hamis, mivel a p รฉs az s vรกltozรณk eltรฉrล รฉrtรฉkkel rendelkeznek.
public class Test {
public static void main(String args[]) {
Integer p = 5;
Integer q = 20;
Integer r =5;
Short s = 5;
System.out.println(p.equals(q));
System.out.println(p.equals(r));
System.out.println(p.equals(s));
}
}
teljesรญtmรฉny
false true false
Az รถsszehasonlรญthatรณ รฉs az รถsszehasonlรญtรณ kรถzรถtti kรผlรถnbsรฉgek Java
Gyakran lรกtom a zavart a kettล kรถzรถtt Java รsszehasonlรญthatรณ รฉs รถsszehasonlรญtรณ; itt van a fล kรผlรถnbsรฉg:

| รsszehasonlรญtรกsi alap | Hasonlรณ | รsszehasonlรญtรณ |
|---|---|---|
| Mรณdszer | รsszehasonlรญthatรณ nyรบjt compareTo() az elemek rendezรฉsรฉnek mรณdja Java. |
A Comparator biztosรญtja compare() az elemek rendezรฉsรฉnek mรณdja Java. |
| Csomag | Hasonlรณ interfรฉsz talรกlhatรณ benne java.lang csomag. |
รsszehasonlรญtรณ interfรฉsz talรกlhatรณ benne java.util csomag. |
| A rendezรฉs logikรกja | A rendezรฉs logikรกjรกnak ugyanabban az osztรกlyban kell lennie, mint a rendezni kรญvรกnt objektumnak. | A rendezรฉs logikรกjรกnak kรผlรถn osztรกlyokban kell lennie, hogy kรผlรถnbรถzล rendezรฉseket รญrhasson az objektumok kรผlรถnbรถzล attribรบtumai alapjรกn. |
| Osztรกly objektum | Annak az osztรกlynak, amelynek objektumait rendezni szeretnรฉ, meg kell valรณsรญtania az รsszehasonlรญthatรณ felรผletet. | Egy osztรกlynak, amelynek objektumait rendezni szeretnรฉ, nem kell รถsszehasonlรญtรณ felรผletet megvalรณsรญtania. |
| Sorozatok rendezรฉse | Egyetlen rendezรฉsi szekvenciรกt biztosรญt. | Tรถbb rendezรฉsi szekvenciรกt biztosรญt. |
| Rendezรฉsi sorrend | Ezzel a mรณdszerrel a termรฉszetes rendezรฉsi sorrend szerint rendezhetลk az adatok. | Ez a mรณdszer a testreszabott rendezรฉsi sorrend szerint rendezi az adatokat. |
| Osztรกly | Az eredeti osztรกlyt รฉrinti. azaz a tรฉnyleges osztรกly megvรกltozik. | Nincs hatรกssal az eredeti osztรกlyra, azaz a tรฉnyleges osztรกly nem mรณdosul. |
| Hasznรกlat | Gyakran implementรกlva az API-ban a Naptรกr, a Wrapper osztรกlyok, a dรกtum รฉs a Hรบr. |
A harmadik fรฉltลl szรกrmazรณ osztรกlyok pรฉldรกnyainak rendezรฉsรฉre van megvalรณsรญtva. |
| vรฉgrehajtja | Minden burkolรณ osztรกly รฉs karakterlรกnc osztรกly hasonlรณ interfรฉszt valรณsรญt meg. | A Comparator egyetlen megvalรณsรญtott osztรกlya a Collator รฉs a RuleBasedColator. |
Bevรกlt gyakorlatok a Comparator รฉs Comparable in hasznรกlatรกhoz Java
- Hasznรกljon รถsszehasonlรญthatรณ interfรฉszt, ha az รถsszehasonlรญtรกs szabvรกnyos az adott osztรกlyhoz.
- Hasznรกlhat lambdรกkat komparรกtorral.
- A rendelkezรฉsre รกllรณ alapvetล osztรกlyok kรถzรผl sok hasonlรณ interfรฉszt valรณsรญt meg.
- Lehetลsรฉg van a TreeSet รฉs a TreeMap hasznรกlatรกra a halmaz vagy a tรฉrkรฉp rendezรฉse kรถzben.
- Az
compareTo()mรณdszer komparรกtorral รฉs รถsszehasonlรญthatรณval is mลฑkรถdik. - Csak akkor hasznรกlja az รถsszehasonlรญtรณ felรผletet, ha < nagyobb rugalmassรกgra van szรผksรฉge.
- Az
compareTo()metรณdus pozitรญv egรฉsz szรกmot ad vissza, ha az elsล objektum nagyobb, mint a mรกsik, negatรญvat, ha alacsonyabb, รฉs nullรกt, ha mindkettล azonos.
Hogyan vรกlasszunk รถsszehasonlรญthatรณ รฉs รถsszehasonlรญtรณ elem kรถzรถtt
Gyakorlati tapasztalataim vรฉgรฉrvรฉnyesen azt sugalljรกk, hogy a Comparable รฉs a Comparator kiaknรกzรกsรกt Java jelentลsen megnรถveli az adatrendezรฉs feletti kontrollt, javรญtva a teljesรญtmรฉnyt รฉs a funkcionalitรกst egyarรกnt.
