[英]How Ignite performs cache.get() operation when hashCode is overridden?
請參閱下面的圖像。
我已經使用equals方法將密鑰放入緩存中,如下所示:
@Override
public boolean equals(Object obj) {
HierarchyMasterKey hierarchyMasterKey = (HierarchyMasterKey) obj;
return equalTo(this.hmCustNo, hierarchyMasterKey.hmCustNo) &&
equalTo(this.hmFromDate, hierarchyMasterKey.hmFromDate) &&
equalTo(this.hmParentCustNo, hierarchyMasterKey.hmParentCustNo) &&
equalTo(this.hmActNo, hierarchyMasterKey.hmActNo);
}
(equalTo方法基本上是null安全等於檢查的對象。)
hashCode計算如下:
@Override
public int hashCode() {
return Objects.hash(hmCustNo,hmActNo);
}
當我嘗試從中獲取時,equals方法將不會執行。 為什么會這樣呢? 點火如何在不執行等於的情況下獲得鑰匙?
[我有一個緩存,該緩存具有一個HierarchyMasterKey和一個HierarchyMaster列表作為值,並使用Externalizable覆蓋哈希碼和等於]
默認情況下,Ignite將以二進制序列化形式在逐字段(包括字段排序)上比較鍵。
hashCode
僅在您的類實現Externalizable
。 這會影響性能。
您還可以實現Binarylizable
並實現相應的方法來影響對象的存儲和比較方式。
在這里找到問題。 它實際上是一個有趣的觀察。
我的緩存已禁用在堆上。 Ignite會在BPlusTree中搜索堆外項目,在這里不需要執行equals方法來查找結果。
如果啟用它,它將像哈希映射的get操作一樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.