java - 当 hashCode 被覆盖时,Ignite 如何执行 cache.get() 操作?
问题描述
请参阅下面的图片。
我已使用 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 方法将不会被执行。为什么会这样?ignite如何在不执行equals的情况下获取key?
[我有一个缓存,它有一个 HierarchyMasterKey 和一个 HierarchyMaster 列表作为值,并使用 Externalizable 覆盖哈希码和等于]
解决方案
在这里发现了问题。这实际上是一个有趣的观察。
我的缓存在堆上被禁用。Ignite 将对堆外项目进行 BPlusTree 搜索,它不需要执行 equals 方法来查找结果。
如果启用,它将像 hashmap get 操作一样工作。
推荐阅读
- symfony - 在 symfony 3 中插入多行很慢
- python - 如何在 Python 函数中提取变量的名称
- javascript - 无法让 localhost 模式在 split.io 中工作
- python - 在 Python 中实现 XNOR 门
- mongodb - mondodb match 语句中值为空时排除字段
- python - 如何在pytest(python)中创建动态测试用例
- angular - 尝试将reducer添加到app.module中的ngrx存储时出现错误“参数类型'action'和'action'不兼容'
- webrtc - webrtc transport_controller_->GetDataChannelTransport(mid)
- python - 使用 loc 时我的数据框没有更新
- wcf - ServiceReferences 中的 Reference.cs 文件未更新