Sobes.tech
Junior

Чаро дар Java методҳои equals ва hashCode заруранд?

sobes.tech AI

Ҷавоб аз AI

Методҳои equals ва hashCode дар Java барои муқоиса дуруст ва кор бо коллексияҳои асосёфта ба хештаблиҳо (масалан, HashMap, HashSet) истифода мешаванд.

  • equals(Object o): муайян мекунад, ки оё объекти ҳозира баробар ба объекти дигар аст. Дар ҳолати пешфарз, ба ишораҳо ба объектҳо муқоиса мекунад. Барои муқоиса кардани ҳолати дохилии объектҳо, бо навиштани махсус иваз карда мешавад.

  • hashCode(): арзиши бутун (код хеш) аз объектро бармегардонад. Коллексияҳо барои ҷустуҷӯи зуд истифода мебаранд. Мубоҳиса бо equals: агар ду объект мувофиқ бошанд, кодҳои хеши онҳо бояд якхела бошанд. Иловаи ин дуруст нест.

Намуди нодуруст ё набудани навиштани ин методҳо метавонад ба рафтори нодуруст дар истифодаи объектҳо дар коллексияҳо оварда расонад, масалан, нобуд шудани объект дар Set пас аз илова кардан ё ёфтани номувофиқ дар HashMap бо калид.

Маслиҳат барои навиштани навишта:

public class MyObject {
    private int id;
    private String name;

    public MyObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // муқоиса ба ишораҳо
        if (o == null || getClass() != o.getClass()) return false; // санҷиши навъ ва null

        MyObject that = (MyObject) o; // тағир додани навъ

        if (id != that.id) return false; // муқоиса кардани майдонҳо
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // ҳисоб кардани код хеш дар асоси майдонҳо
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}