2016-05-04 19 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,并确保每个新功能都具有涵盖其所有行为的单元测试。然后确保当有人将代码推入您的版本控制系统时,您的单元测试会自动运行;所以你注意到什么时候东西坏了。除此之外,为单元测试无法测试的方面构建合理的功能/集成测试。