第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何比較兩個(gè)java對(duì)象

如何比較兩個(gè)java對(duì)象

瀟湘沐 2019-09-26 11:00:23
如何比較兩個(gè)java對(duì)象我有兩個(gè)從同一類(lèi)實(shí)例化的java對(duì)象。MyClass myClass1 = new MyClass();MyClass myClass2 = new MyClass();如果我將它們的兩個(gè)屬性都設(shè)置為完全相同的值,然后驗(yàn)證它們是否相同if(myClass1 == myClass2){    // objects match    ...}if(myClass1.equals(myClass2)){    // objects match    ...}但是,這些方法都不返回真實(shí)值。我已經(jīng)檢查了每個(gè)屬性,并且它們匹配。如何比較這兩個(gè)對(duì)象以驗(yàn)證它們是否相同?
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊

您需要提供自己的equals()in 實(shí)現(xiàn)MyClass。

@Overridepublic boolean equals(Object other) {
    if (!(other instanceof MyClass)) {
        return false;
    }

    MyClass that = (MyClass) other;

    // Custom equality check here.
    return this.field1.equals(that.field1)
        && this.field2.equals(that.field2);}

hashCode()如果哈希表中有可能使用您的對(duì)象,則還應(yīng)該覆蓋。一個(gè)合理的實(shí)施將是該對(duì)象的字段的哈希碼喜歡的東西結(jié)合起來(lái):

@Overridepublic int hashCode() {
    int hashCode = 1;

    hashCode = hashCode * 37 + this.field1.hashCode();
    hashCode = hashCode * 37 + this.field2.hashCode();

    return hashCode;}

有關(guān)實(shí)現(xiàn)哈希函數(shù)的更多詳細(xì)信息,請(qǐng)參見(jiàn)此問(wèn)題。


查看完整回答
反對(duì) 回復(fù) 2019-09-26
?
叮當(dāng)貓咪

TA貢獻(xiàn)1776條經(jīng)驗(yàn) 獲得超12個(gè)贊

您需要覆蓋equalshashCode
equals將根據(jù)您需要的屬性比較對(duì)象的相等性,并且hashCode必須進(jìn)行強(qiáng)制性操作才能使對(duì)象在Collections和中正確使用Maps

查看完整回答
反對(duì) 回復(fù) 2019-09-26
?
慕工程0101907

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊

您必須從類(lèi)Object正確重寫(xiě)方法equals()

編輯:我認(rèn)為我的第一反應(yīng)是被誤解了,可能是因?yàn)槲也惶_。因此,我決定添加更多說(shuō)明。

為什么必須重寫(xiě)equals()?好吧,因?yàn)檫@是開(kāi)發(fā)人員的工作,可以決定兩個(gè)對(duì)象相等意味著什么。在大多數(shù)情況下,引用相等是不夠的。

例如,假設(shè)您有一個(gè)HashMap,其鍵的類(lèi)型為Person。每個(gè)人都有名字和地址?,F(xiàn)在,您想使用鍵查找詳細(xì)的bean。問(wèn)題在于,您通常無(wú)法使用與地圖中的引用相同的引用創(chuàng)建一個(gè)實(shí)例。您要做的是創(chuàng)建Person類(lèi)的另一個(gè)實(shí)例。顯然,運(yùn)算符==在這里不起作用,您必須使用equals()。

但是現(xiàn)在,我們遇到了另一個(gè)問(wèn)題。假設(shè)您的集合很大,并且您想執(zhí)行搜索。天真的實(shí)現(xiàn)將使用equals()將您的鍵對(duì)象與映射中的每個(gè)實(shí)例進(jìn)行比較。但是,那將是非常廣闊的。這里是hashCode()。正如其他人指出的那樣,哈希碼是一個(gè)唯一的數(shù)字,不必唯一。重要的要求是,每當(dāng)equals()對(duì)兩個(gè)對(duì)象都為true時(shí),hashCode()必須為兩個(gè)對(duì)象返回相同的值。逆蘊(yùn)涵不成立,這是一件好事,因?yàn)楣4a將我們的密鑰分為各種存儲(chǔ)桶。在單個(gè)存儲(chǔ)桶中,我們有少量類(lèi)Person的實(shí)例。當(dāng)我們執(zhí)行搜索時(shí),該算法可以立即跳轉(zhuǎn)到正確的存儲(chǔ)桶,并且僅對(duì)每個(gè)實(shí)例執(zhí)行等于。

還有一點(diǎn)。有些集合要求在用作鍵的類(lèi)中正確實(shí)現(xiàn)hashCode()方法,不僅是出于性能方面的考慮。示例包括:HashSet和LinkedHashSet。如果它們不重寫(xiě)hashCode(),則默認(rèn)的Object hashCode()方法將允許將您可能認(rèn)為“有意義相等”的多個(gè)對(duì)象添加到“不允許重復(fù)”的集合中。

一些使用hashCode()的集合

  • HashSet的

  • LinkedHashSet

  • HashMap中

看看apache commons中的這兩個(gè)類(lèi),它們將使您輕松實(shí)現(xiàn)equals()和hashCode()


查看完整回答
反對(duì) 回復(fù) 2019-09-26
  • 3 回答
  • 0 關(guān)注
  • 1171 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)