Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么要映射&x27;在hazelcast Map中,当比较对象时,强制使用equals方法_Java_Hazelcast_Distributed Caching_Distributed Cache_Hazelcast Imap - Fatal编程技术网

Java 为什么要映射&x27;在hazelcast Map中,当比较对象时,强制使用equals方法

Java 为什么要映射&x27;在hazelcast Map中,当比较对象时,强制使用equals方法,java,hazelcast,distributed-caching,distributed-cache,hazelcast-imap,Java,Hazelcast,Distributed Caching,Distributed Cache,Hazelcast Imap,这更像是一个设计问题。我想知道为什么hazelcast使用对象的二进制(序列化)形式的hashCode()和equals(),而不是复合键对象提供的形式 我遇到了一个问题,我必须将一些元数据(lastModifiedTimeStamp,lastModifiedNode等)与密钥对象关联,这是不可能的,因为存在此冲突 虽然我知道还有其他方法可以解决我的问题,但将这些属性作为密钥的一部分(然后覆盖hashCode()/equals()方法以排除元数据)将是一个更干净的方法。这是一个非常好的问题。原因

这更像是一个设计问题。我想知道为什么hazelcast使用对象的二进制(序列化)形式的
hashCode()
equals()
,而不是复合键对象提供的形式

我遇到了一个问题,我必须将一些元数据(
lastModifiedTimeStamp
lastModifiedNode
等)与密钥对象关联,这是不可能的,因为存在此冲突


虽然我知道还有其他方法可以解决我的问题,但将这些属性作为密钥的一部分(然后覆盖
hashCode()
/
equals()
方法以排除元数据)将是一个更干净的方法。

这是一个非常好的问题。原因有多种,但其中之一可能是:

我们以序列化(=二进制)形式保存密钥。在另一种情况下,要从域对象中使用常规hashCode()和equals(),我们需要将它们设置为反序列化(对象)格式

仅仅这一事实就意味着: -您总是需要所有集群成员上的域对象的.class文件。当成员仅处理序列化blob时,您不需要这样做

  • 您可以只保留反序列化格式的键,但随后必须为每个远程请求序列化它们->性能损失。Hazelcast建立在一个假设之上,即您的大多数操作都是远程的

  • 或者您可以在序列化和反序列化的表单->空格惩罚上维护键

我相信还有其他原因;这些只是我脑海中能想到的几个


Credits-Jaromir Hamala-Hazelcast邮件列表。

@pveentjer,还有什么你能想到的吗?