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

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

為啥containsKey()方法不需要重寫equals()方法????

為啥調(diào)用congtainsKey()的時(shí)候沒有出現(xiàn)錯(cuò)誤???

正在回答

4 回答

如果key是自定義類型,那就要重寫equals方法,而且還要重寫hashcode方法。這邊的String類型已經(jīng)重寫了hashcode方法和equals方法。自定義的類型都要重寫equals。至于要不要重寫hashCode,看你是否實(shí)現(xiàn)的hash的接口,或者你繼承的父類是不是實(shí)現(xiàn)了,不是,不用重寫。是就要重寫。

要重寫hashCode方法主要是源碼里調(diào)用了hash方法的。

Hashmap;可以看見containsKey有hash

public?boolean?containsKey(Object?key)?{
????return?getNode(hash(key),?key)?!=?null;
}
public?synchronized?boolean?contains(Object?value)?{
????if?(value?==?null)?{
????????throw?new?NullPointerException();
????}

????Entry<?,?>?tab[]?=?table;
????for?(int?i?=?tab.length?;?i--?>?0?;)?{
????????for?(Entry<?,?>?e?=?tab[i]?;?e?!=?null?;?e?=?e.next)?{
????????????if?(e.value.equals(value))?{
????????????????return?true;
????????????}
????????}
????}
????return?false;
}

HashSet:也有hash方法

public?boolean?containsKey(Object?key)?{
????return?getNode(hash(key),?key)?!=?null;
}

ArrayList;并沒有調(diào)用hash方法,indexOf同樣也沒有調(diào)用

public?boolean?contains(Object?o)?{
????return?indexOf(o)?>=?0;
}


0 回復(fù) 有任何疑惑可以回復(fù)我~

湊巧Key是String類型的,String重寫過了equals

0 回復(fù) 有任何疑惑可以回復(fù)我~

contains() 和 containsKey()都會調(diào)用equals()方法

參數(shù)為String類型的equals方法和以對象為類型的equals方法不同。

equals(String key)會同時(shí)比較地址和內(nèi)容,其中一個(gè)為true的時(shí)候返回true。

equals (Object value)只會比較地址是否相同,地址相同的時(shí)候返回true。

因此要重寫equals方法之后才能使用containsKey方法(否則只會比較地址,而不會比較學(xué)生姓名)。containsKey由于參數(shù)是String,所有默認(rèn)的equals就會比較值和地址,就不需要重寫了。

1 回復(fù) 有任何疑惑可以回復(fù)我~

containsKey()和containsValue()都調(diào)用了equals()方法進(jìn)行比較,但是這個(gè)題目中的key是String類型的,String類型的equals()比較的是字符串的內(nèi)容,所以我們根據(jù)鍵去查找學(xué)生的結(jié)果是true;但是Value是Student類型的,equals()比較的是對象的引用地址,所以返回結(jié)果是false。那么就需要重寫equals()方法。

1 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

為啥containsKey()方法不需要重寫equals()方法????

我要回答 關(guān)注問題
微信客服

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

幫助反饋 APP下載

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

公眾號

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