2016-05-04 58 views
0

我已經實現了hashSet,並且添加了一些對象,但後來我們更改了哈希碼實現。哈希碼對hashSet的實現效果如何變化

1>在這種情況下會發生什麼,

2>怎樣做才能防止哈希碼implementaion

+2

你是什麼意思「改變運行時間」? – GhostCat

+0

如果更改了哈希碼實現,那麼您編譯並重新部署了新代碼,因此當您重新啓動代碼時必須重新生成哈希集,那麼問題是什麼? – Andreas

回答

3

的變化非常頻繁,答案是:這取決於。

假設您更改其中一個類的hashCode()實現。

1)if(你的應用程序沒有保存它的數據) 然後,當你重新啓動你的應用程序時,每一塊都將使用新的實現。因此:沒問題

2)if(你的應用程序確實存在它的數據) 然後,當你重新啓動你的應用程序時將重新加載它的數據;並取決於你改變hashCode()的方式/地方......有趣的事情可能會發生。

對於第二個問題;有沒有通用的方法來「解決」,但有一個衆所周知的做法,如果你遵循他們,機會變得更小,有人搞砸了:

1)教育和技能:試圖確保每個人都接觸代碼知道自己在做什麼(而不是盲目地遵從命令「但你告訴我做xyz,所以我坐下來,確實xyz,根本不考慮後果是什麼」)

2)好的設計, - 使用現有組件。喜歡:標準的java自帶「已知」好套,地圖,集合。你爲什麼認爲你必須重新發明輪子,爲什麼你認爲你的實施將會「更好」?

3)好的測試。做TDD,並確保每個新功能都具有涵蓋其所有行爲的單元測試。然後確保當有人將代碼推入您的版本控制系統時,您的單元測試會自動運行;所以你注意到什麼時候東西壞了。除此之外,爲單元測試無法測試的方面構建合理的功能/集成測試。