我正在使用 Hazelcast 2.6。我有一张地图,其中键是对象。
正如我可以从 Hazelcast 文档中阅读的那样http://hazelcast.org/docs/latest/javadoc/com/hazelcast/core/IMap.html
“这个类不是通用的 ConcurrentMap 实现!虽然这个类实现了 Map 接口,但它故意违反了 Map 的通用约定,即在比较对象时强制使用 equals 方法。这个实现比较序列化的字节而不是 equals 方法对象的版本。”
有没有办法强制 Hazelcast 使用 equals 而不是对象的序列化字节版本?
我找到了答案:
在 Hazelcast 中,您不能依赖为 key 对象定义的 equals/hashcode。您必须使用仅包含使其独一无二的属性的对象。
从这里:http : //hazelcast.org/mastering-hazelcast/chapter-5/#hashcode-and-equals
在大多数情况下,您可能会使用一些基本类型,例如 Long、Integer 或 String 作为键。但在某些情况下,您将需要创建自定义密钥。但是要在 Hazelcast 中正确地做到这一点,您需要了解这种机制 [哪种机制?] 是如何工作的,因为与传统的地图实现相比,它的工作方式有所不同。当您在 Hazelcast 映射中存储键/值时,不是存储对象,而是将对象序列化为字节数组并存储这些。要在 Hazelcast 中使用 hash/equals,您需要了解以下规则:
对于键:hash/equals 是根据字节数组的内容确定的,因此相等的键需要产生相等的字节数组。见【序列化章节;可序列化警告]。
对于值:hash/equals 是根据 in-memory-format 确定的;对于 BINARY,使用二进制格式。对于 OBJECT 和 CACHED,使用对象的 equals。