簡體   English   中英

使用引用相等的集合

[英]Collection using reference equality

在 Java 中是否可以創建使用引用相等(即== )而不是equals()方法的HashMap

使用IdentityHashMap類。 這是HashMap的變體,其中使用==System.identityHashCode()代替Object.equals(Object)Object.hashCode()

請注意,此類故意違反了java.util.Map的 API 契約,該契約要求鍵相等性基於equals(Object)

您可以覆蓋插入到 HashMap 中的對象的 equals 方法來測試引用相等性。

如:

public boolean equals(Object obj) {
    return this == obj;
}

IdentityHashmap類隨標准 Java 一起提供。 來自 JavaDoc:

此類使用哈希表實現 Map 接口,在比較鍵(和值)時使用引用相等代替對象相等。 換句話說,在 IdentityHashMap 中,兩個鍵 k1 和 k2 被認為是相等的,當且僅當 (k1==k2)。 (在普通 Map 實現(如 HashMap)中,當且僅當 (k1==null ? k2==null : k1.equals(k2)) 時,兩個鍵 k1 和 k2 被認為是相等的。)

請注意,許多采用Map的函數都假設它們將使用equals而不是引用相等。 所以要小心你將IdentityHashmap傳遞給哪些函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM