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

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

在java中重用哈希表中的鍵

在java中重用哈希表中的鍵

回首憶惘然 2021-07-09 14:11:20
如果我有一個(gè)類似的 HashTableHashTable<Person, Salary> Salaries還有一個(gè)不相關(guān)的,比如HashTable<Person, Car> Cars不相關(guān)我的意思是,Person 的 Object 引用應(yīng)該是不同的,但我們知道我們正在談?wù)撓嗤?Person,具有相同的名字和姓氏。我可以使用 Salaries.entrySet() 找到鑰匙,我知道這個(gè)人有一輛車。在 Cars HashTable 中使用 Keys 查找對(duì)應(yīng)的汽車是否有效?如果使用 Integer 代替 Person 會(huì)怎樣?
查看完整描述

3 回答

?
慕絲7291255

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

簡短的回答:

如果Person用于將Salary對(duì)象存儲(chǔ)到salariesHashtable 中的Person對(duì)象與用于將Car對(duì)象存儲(chǔ)到carsHashtable 中的對(duì)象相等,則可以使用其中一個(gè)來檢索另一個(gè)。

現(xiàn)在,這是什么意思...

等于的含義由 定義Object.equals(Object)。如果不覆蓋此方法,則只有相同的對(duì)象才相等,即實(shí)例僅等于自身。在這種情況下,您不能使用不同的Person對(duì)象。

您可能想要覆蓋equals以檢查表示對(duì)象是否相等。這顯然假設(shè)您可以修改Person類。

這是假設(shè)你正在談?wù)摰?strong>不同實(shí)例的同一類代表是同一個(gè)人,而不是不同的情況不同的類

通常,equals應(yīng)該只為同一類的對(duì)象返回 true (即使是子類也是一個(gè)問題)。因此,如果您的Person對(duì)象屬于不同的類(更像是 aSalaryPersonCarPerson)或者如果您無法更改它們,您可能需要實(shí)現(xiàn)一個(gè)PersonKey類來提取與相等性(名稱,...)相關(guān)的數(shù)據(jù)并將其用作鍵.

使用整數(shù)作為鍵:

根據(jù)Integer 類的JavaDoc,Integer.equals(Integer)如果兩個(gè)整數(shù)對(duì)象具有相同的int值,則返回 true 。換句話說:Integer用作 a 中的鍵Hashtable將通過鍵的整數(shù)值檢索對(duì)象。

注意事項(xiàng):

  • Object.hashCode()必須是一致的equals。簡而言之,如果您覆蓋equals,您還必須覆蓋hashCode并確保它為所有equals認(rèn)為相等的對(duì)象返回相同的哈希碼。

  • 您必須確保 equal 使用的值在對(duì)象生命周期內(nèi)不會(huì)改變(或者至少只要它們作為 Hashtable 的鍵......) - 否則檢索將失敗!通常建議equals中使用的字段應(yīng)該是final

順便一提:

  • 根據(jù)Java 代碼約定,變量名以小寫字母開頭。因此,我將您的 Hashtablessalariescars.

  • HashMap<K,V>在 Java 中比 Hashtable<K,V>. 哈希表通常僅在需要同步實(shí)現(xiàn)時(shí)使用。

也可以看看:

  • Java Practices有一篇關(guān)于equals和 about的好文章hashCode。

  • 有關(guān)詳細(xì)信息,equals請(qǐng)參閱Angelika Langer 的“平等的秘密()”

  • Joshua Bloch 的“Effective Java”展示了 Java 的所有復(fù)雜部分


查看完整回答
反對(duì) 回復(fù) 2021-07-14
?
HUH函數(shù)

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

這取決于不同的條件:

1) 如果第一個(gè) HashTable 的 keyset 中的 person 對(duì)象引用指向第二個(gè) HashTable 中的完全相同的對(duì)象,那么為 person 使用相同的汽車鍵就可以了。

2) 可能存在兩個(gè)人的名字和姓氏相同但對(duì)象不同的情況。在這種情況下,哈希值將不同,因此 HashTable 中的鍵。在這種情況下,您不能使用相同的密鑰。

如果您在 HashTable 中使用整數(shù)作為鍵,那么在您的場景中就可以了。

希望這會(huì)有所幫助。


查看完整回答
反對(duì) 回復(fù) 2021-07-14
?
皈依舞

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

使用Keys在Cars HashTable中查找對(duì)應(yīng)的車是否有效


當(dāng)然是啦


為了提供這種可能性,您應(yīng)該覆蓋您的hashCodeandequals方法并實(shí)現(xiàn)比較兩個(gè)值的方法 - 例如(假設(shè) Person 類包含一些id具有唯一值的字段)


@Override

public boolean equals(Object o) {

    if (this == o) return true;

    if (o == null || getClass() != o.getClass()) return false;


    Person p = (Person) o;


    return getId().equals(p.getId());

}


@Override

public int hashCode() {

    return getId().hashCode();

}

然后,如果您看一下(1.8)的equals實(shí)現(xiàn),java.lang.Integer您會(huì)看到


public boolean equals(Object obj) {

    if (obj instanceof Integer) {

        return value == ((Integer)obj).intValue();

    }

    return false;

}


public static int hashCode(int value) {

    return value;

}

什么意味著這個(gè) Integer 類正在按值進(jìn)行比較 - 所以它會(huì)滿足您的要求


查看完整回答
反對(duì) 回復(fù) 2021-07-14
  • 3 回答
  • 0 關(guān)注
  • 254 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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