Hazelcast map:使用等于Map键

时间:2014-09-12 16:03:31

标签: map hazelcast

我正在使用Hazelcast 2.6。 我有一张地图,其中的键是对象。

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

“这个类不是通用的ConcurrentMap实现!虽然这个类实现了Map接口,但它故意违反了Map的一般契约,它要求在比较对象时使用equals方法。而不是equals方法,这个实现比较对象的序列化字节版本。“

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

2 个答案:

答案 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”。然后,数据将以反序列化的形式存储。