Hazelcast Map:使用equals作为Map键

3
我正在使用Hazelcast 2.6。我有一个键为对象的映射表。
根据Hazelcast文档http://hazelcast.org/docs/latest/javadoc/com/hazelcast/core/IMap.html所述:
“这个类不是通用的ConcurrentMap实现!虽然这个类实现了Map接口,但它故意违反了Map的一般契约,即在比较对象时必须使用equals方法。而这个实现将比较对象的序列化字节版本。”
是否有一种方法可以强制Hazelcast使用equals而不是对象的序列化字节版本?
2个回答

6
我找到了答案:
在Hazelcast中,您不能依赖于为键对象定义的equals/hashcode。您必须使用仅包含使其唯一的属性的对象。
来自这里:http://hazelcast.org/mastering-hazelcast/chapter-5/#hashcode-and-equals 在大多数情况下,您可能会使用一些基本类型,如Long、Integer或String作为键。但在某些情况下,您需要创建自定义键。但是,在Hazelcast中正确地执行此操作,您需要了解该机制的工作原理,因为它与传统的映射实现不同。当您将键/值存储在Hazelcast映射中时,对象被序列化为字节数组并存储。要在Hazelcast中使用哈希/相等性,您需要了解以下规则:
对于键:哈希/相等性是基于字节数组的内容确定的,因此相等的键需要产生相等的字节数组。请参见[序列化章节;可序列化警告]。
对于值:哈希/相等性是根据内存格式确定的;对于BINARY,使用二进制格式。对于OBJECT和CACHED,使用对象的equals。

0
如果您想使用自己的等于实现,可以尝试将映射的内存格式设置为“Object”。数据将以反序列化形式存储。

正如你可以在这里阅读的 http://hazelcast.org/mastering-hazelcast/chapter-5/#hashcode-and-equals 使用"In-Memory Format"中的"Object"将用于对象值的反序列化形式,而不是键。 - agiannetti

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接