![](/img/trans.png)
[英]How does a Java HashMap handle different objects with the same hash code?
[英]Hash code for comparing objects with the same structure between Java and C#
我正在开发一个移动应用程序(用Java实现),该应用程序将数据与Web服务(用C#实现)同步。 我想检查从服务器接收(并保存到数据库)的对象与存储在服务器上的对象相比是否具有正确的数据。
我想出的解决方案是创建一个对象的哈希码,可以轻松地在移动应用程序和Web服务之间进行比较。
我正在考虑使用(在服务器端或在移动应用程序中)本机hashCode()
方法,然后尝试以第二种语言中的一种语言重新实现其工作方式。 这是否可能,或者我必须重写两种语言中的hashCode()
方法,以便给出相同的哈希码? 有没有更好的方法来验证数据完整性?
对象结构不是很复杂,尽管每个对象都有许多属性。
如果要对对象使用内置的哈希码方法,则需要在两侧都覆盖哈希函数。
建立自己的不依赖哈希码的助手可能是更干净的解决方案,因为整数哈希码的冲突率相对较高。 SHA256之类的东西会产生更长的哈希。
在.Net(包括用C#编写的代码)中,明确定义了GetHashCode,因为它不能保证在重新启动,应用程序域和CLR版本之间保持不变:
。 此外,.NET Framework不保证GetHashCode方法的默认实现,并且此方法返回的值在.NET Framework版本和平台(例如32位和64位平台)之间可能有所不同。
Java hashCode有类似的要求(我的重点):
在Java应用程序的执行过程中,只要在同一对象上多次调用它,则hashCode方法必须一致地返回相同的整数,前提是未修改该对象的equals比较中使用的信息。 从一个应用程序的执行到同一应用程序的另一执行,此整数不必保持一致。
您总是可以在服务器端使用DeepEqual之类的库来为您检查对象中每个属性的值。
我猜您想让您的移动Java应用程序在CPU上保持发光。 这样可以避免您在客户端上进行任何额外的工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.