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

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

LinkedList 和 TreeMap:compareTo 還是 equals?

LinkedList 和 TreeMap:compareTo 還是 equals?

qq_笑_17 2022-05-25 10:33:26
我需要澄清一下 TreeMap 和 LinkedList 的使用。這兩個結(jié)構(gòu)使用 compareTo 還是 equals?特別是,TreeMap 保持鍵中的順序,我想使用為鍵定義的類的 compareTo 方法。但是,在使用 get 時,他們是使用 compareTo 還是 equals 來查看您傳遞的密鑰是否包含在內(nèi)?我對 LinkedList 中的 contains 和 getIndex 有同樣的疑問。
查看完整描述

2 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊

TreeMap使用compareTo,并且如果不符合(即應(yīng)該是真的),文檔會警告您出現(xiàn)問題。compareToequalsa.compareTo(b) == 0 <=> a.equals(b)


請注意,如果此排序的映射要正確實現(xiàn) Map 接口,則樹映射維護(hù)的排序 ... 必須與 equals 一致。


LinkedList使用equals.


之所以TreeMap必須使用與 一致的排序,equals是因為 的契約 用 來Map定義行為equals。例如,containsKey定義為:


true當(dāng)且僅當(dāng)此映射包含一個鍵的映射k時才返回(key==null ? k==null : key.equals(k))


假設(shè)您定義了一個這樣的類:


class Bad implements Comparable<Bad> {

  @Override public int compareTo(Bad other) { return 0; }

}

如果你要寫:


Bad b1 = new Bad();

Bad b2 = new Bad();

然后:


Map<Bad, String> hm = new HashMap<>();

hm.put(b1, "");

System.out.println(hm.containsKey(b2));  // false

然而


Map<Bad, String> tm = new TreeMap<>();

tm.put(b1, "");

System.out.println(tm.containsKey(b2));  // true

盡管事實上


System.out.println(tm.keySet().stream().anyMatch(k -> k.equals(b2))); // false

因此,TreeMap違反了 的合同Map,因為Bad沒有Comparable與 一致地執(zhí)行equals。



查看完整回答
反對 回復(fù) 2022-05-25
?
慕慕森

TA貢獻(xiàn)1856條經(jīng)驗 獲得超17個贊

的 JavadocTreeMapLinkedList回答了這個問題:

V java.util.TreeMap.get(對象鍵)

返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。

更正式地說,如果此映射包含從鍵 k 到值 v 的映射,使得鍵根據(jù)映射的 ordering 比較等于 k,則此方法返回 v;否則返回null。(最多可以有一個這樣的映射。)

boolean java.util.LinkedList.contains(Object o)

如果此列表包含指定元素,則返回 true。更正式地說,當(dāng)且僅當(dāng)此列表包含至少一個元素 e 滿足 (o==null ? e==null : o.equals(e)) 時,才返回 true。

因此, for TreeMapComparator\Comparable 實現(xiàn)用于確定鍵的相等性,而 for LinkedListsequals用于。


查看完整回答
反對 回復(fù) 2022-05-25
  • 2 回答
  • 0 關(guān)注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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