2012-03-10 41 views
1

我想在模擬中存儲有關人員對象的信用歷史信息。我應該使用什麼來跟蹤java中可變對象的細節

我想使用HashMap<Person, CreditHistory>,但java API說我應該警惕使用HashMaps跟蹤可變對象(如我的程序中的信用歷史記錄)。

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/HashMap.html

是否有更好的結構嗎?

+2

該文檔有時會說怪異的東西......除非您計劃修改密鑰,否則這不是真的。可以修改所有值。 – Jon 2012-03-10 00:50:05

+0

只是發送信用信息給我,我會跟蹤它。 – nsfyn55 2012-03-10 01:11:12

回答

5

注意事項僅適用於密鑰 - 如果更改了影響hashCode()equals()行爲的密鑰的任何內容,則會中斷哈希映射,並且將無法再次找到該密鑰。對於這些值,你可以自由地做任何你想做的事情。如果修改一個值會改變你的地圖的語義,那就取決於你了。

+0

我不得不修改Person對象。我應該重寫Object()中的hashCode()函數來返回該人的String uniqueID嗎?或者,或者,我可以使用String uniqueID作爲地圖的關鍵字 – bernie2436 2012-03-10 01:17:52

+0

使用'uniqueId'作爲關鍵聽起來像是正確的調用。 – 2012-03-10 02:21:30

+0

通常,使用複雜的可變對象作爲鍵不是一個好主意。使用_value_唯一標識符的不可變變量。就你而言,如果某個人的uniqueID不能改變,那麼這是一個很好的候選人。 – 2012-03-10 05:01:46

1

除非您計劃經常修改Person對象,否則您應該沒問題。

API說要小心使用可變對象作爲鍵。這是因爲當密鑰更改時嚴格的邏輯可能會失敗。如果你編程正確,你會沒事的。

如果你只是改變CreditHistory對象,這是最好的結構和(在我看來)最容易使用。

相關問題