我正在使用Hazelcast 2.6。 我有一张地图,其中的键是对象。
我可以阅读Hazelcast文档http://hazelcast.org/docs/latest/javadoc/com/hazelcast/core/IMap.html
“这个类不是通用的ConcurrentMap实现!虽然这个类实现了Map接口,但它故意违反了Map的一般契约,它要求在比较对象时使用equals方法。而不是equals方法,这个实现比较对象的序列化字节版本。“
有一种方法可以使用equals强制Hazelcast而不是对象的序列化字节版本吗?
答案 0 :(得分:4)
我找到了答案:
在Hazelcast中,您不能依赖为关键对象定义的equals / hashcode。 您必须使用仅包含使其唯一的属性的对象。
从这里开始:http://hazelcast.org/mastering-hazelcast/chapter-5/#hashcode-and-equals
在大多数情况下,您可能会使用某些基本类型,如a Long,Integer或String作为键。但在某些情况下,你需要 创建自定义键。但要在Hazelcast中正确地完成它,你需要 了解这种机制[哪种机制?]是如何工作的,因为它 与传统的地图实现相比,它的工作方什么时候 您将键/值存储在Hazelcast映射中,而不是存储 对象,对象被序列化为字节数组并存储它们。 要在Hazelcast中使用hash / equals,您需要了解以下内容 规则:
表示密钥:哈希/等于根据内容确定 字节数组,所以相等的键需要产生相等的字节数组。看到 [序列化章节;可序列化警告]。
表示值:hash / equals基于 内存格式;对于BINARY,使用二进制格式。对于OBJECT和 CACHED使用了对象的等号。
答案 1 :(得分:0)
如果要使用equals实现,可以尝试将映射的内存中格式设置为“Object”。然后,数据将以反序列化的形式存储。