Junior
Чӣ гуна муқоиса кардани объектҳо дар Java анҷом дода мешавад?
sobes.tech AI
Ҷавоб аз AI
Дар Java, муқоисаи объектҳо бо чанд роҳ анҷом дода мешавад, вобаста ба он, ки чӣ бояд муқоиса шавад: истинодҳо ба объектҳо ё мазмуни объектҳо.
-
Муқоисаи истинодҳо:
- Оператор
==: Санҷиш мекунад, ки оё ду истинод ба як объект дар ёддошт ишора мекунанд.
Object obj1 = new Object(); Object obj2 = new Object(); boolean areSameReference = (obj1 == obj2); // false, объектҳои гуногун Object obj3 = obj1; boolean areStillSameReference = (obj1 == obj3); // true, истинодҳо ба як объект - Оператор
-
Муқоисаи мазмун:
- Метод
equals(): Ин метод дар класиObjectмуайян шудааст ва ба таври пешфарз истинодҳоро муқоиса мекунад. Аммо, кластаро метавонанд ин методро такрорбарӣ кунанд, то логикаи муқоисаи мазмунро амалӣ созанд. Масалан,String,Integer, коллеҷҳо (монандиArrayList,HashMap)equals-ро барои муқоисаи арзишҳо ё унсурҳо такрорбарӣ мекунанд.
String str1 = new String("hello"); String str2 = new String("hello"); boolean areEqualContent = str1.equals(str2); // true, мазмун яксон аст boolean areSameReferenceString = (str1 == str2); // false, объектҳои гуногун Integer int1 = 10; Integer int2 = 10; boolean areEqualIntegers = int1.equals(int2); // true boolean areSameReferenceInteger = (int1 == int2); // метавонад true ё false бошад, вобаста ба кеши Integer, аммо истифодаи `equals` беҳтар аст- Вақте ки метод
equals()такрорбарӣ мешавад, ҳатман боядhashCode()-и онро ҳам такрорбарӣ кард, то шартҳои шартнома риоя шаванд: Агарobj1.equals(obj2)trueбошад, пасobj1.hashCode()бояд баробар боobj2.hashCode()бошад. Қайд кардан лозим аст, ки баробар кодҳои хеш наметавонанд кафолат диҳанд, ки объектҳо баробар мебошанд.
- Метод
-
Муқоисаи бо истифода аз
compareTo()ё муқоисакунандагон:- Интерфейси
Comparable: МетодcompareTo(T other)-ро муайян мекунад, ки имкон медиҳад, ки объектҳои класи худ бо дигар объектҳои ҳамин класи муқоиса шаванд. Вай арзиши манфӣ, нулӣ ё мусбатро бармегардонад, ки нишон медиҳад, ки оё объекти ҳозира хурдтар, баробар ё калонтар аз объекти дода шудааст.
public class MyObject implements Comparable<MyObject> { private int value; //... конструктор ва геттерҳо @Override public int compareTo(MyObject other) { return Integer.compare(this.value, other.value); } }- Интерфейси
Comparator: Имкон медиҳад, ки логикаи махсуси муқоиса барои ҳар гуна объектҳо муайян карда шавад, ҳатто агар онҳоComparable-ро иҷро накунанд. Ин кӯмак мекунад, вақте ки лозим аст, логикаи гуногуни сортинг ё муқоиса барои як класи муайян, ё вақте ки тағир додани класи асосӣ имконнопазир аст.
import java.util.Comparator; public class MyObjectValueComparator implements Comparator<MyObject> { @Override public int compare(MyObject obj1, MyObject obj2) { return Integer.compare(obj1.getValue(), obj2.getValue()); } } - Интерфейси
Намуди муқоиса интихоб кардан ба вазифаи мушаххас вобаста аст: == барои санҷиши ҳуввияти объектҳо, equals() барои санҷиши баробарии мазмун ва Comparable/Comparator барои муайян кардани тартиб ё иҷрои муқоисаҳои мураккаб.