2014-09-12 68 views
2

我使用Hazelcast 2.6。 我有一个地图,其中的键是对象。Hazelcast地图:使用等于地图键

,我可以从Hazelcast文档http://hazelcast.org/docs/latest/javadoc/com/hazelcast/core/IMap.html

读“这个类是不通用的ConcurrentMap实现!虽然这个类实现了Map接口,它有意违反Map的常规协定,这要求使用的equals方法比较对象,而不是equals方法,此实现比较对象的序列化字节版本。“

有一种方法强制Hazelcast使用equals而不是序列化的字节版本的对象?

回答

4

我找到了答案:

在Hazelcast你不能依靠的关键对象定义的等号/哈希码。 您必须使用仅包含使其唯一的属性的对象。

从这里:http://hazelcast.org/mastering-hazelcast/chapter-5/#hashcode-and-equals

在大多数情况下,你可能会使用一些基本的类型像 长,整数或字符串作为关键的。但在某些情况下,您将需要 创建自定义密钥。但要在Hazelcast中正确地做到这一点,您需要了解该机制[哪种机制?]的工作原理,因为它与传统地图实现相比的工作原理不同。当 您将键/值存储在Hazelcast地图中,而不是存储对象时,该对象将被序列化为字节数组并将其存储。 要使用散列Hazelcast /等于你需要知道以下 规则:

钥匙:哈希/等于是基于 字节数组的内容决定的,所以等于键需要引起同等字节阵列。见 [序列化章节;可序列化的警告]。

对于值:散列/等于基于 内存中格式确定;对于BINARY,使用二进制格式。对于OBJECT和 CACHED,使用等于对象的值。

0

如果你想使用你的equals实现,你可以尝试设置地图的内存中格式为“Object”。数据将以反序列化的形式存储。

+0

正如你可以在这里阅读http://hazelcast.org/mastering-hazelcast/chapter-5/#hashcode-and-equals使用内存格式的“对象”将使用反序列化的形式值中的对象,而不是键。 – agiannetti 2014-09-15 08:16:49