![](/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.