2014-09-12 70 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