如何改变hashcode实现对hashSet的影响

时间:2016-05-04 06:58:38

标签: java data-structures collections hashmap

我已经实现了hashSet,并且我添加了一些对象,但后来我们更改了hashcode实现。

1>在这种情况下会发生什么,

2>如何防止哈希码实现的改变

1 个答案:

答案 0 :(得分:3)

通常,答案是:它取决于。

假设您更改了其中一个类的hashCode()实现。

1)if(您的应用程序不会保留其数据)   然后,当您重新启动应用程序时,每个部分都将使用新的实现。因此:没问题

2)if(你的应用确实持有其数据)   然后,当您重新启动应用程序时,将重新加载其数据;并且取决于你改变hashCode()的方式/位置...可能会发生有趣的事情。

关于你的第二个问题;没有通用的方法来解决"但是,有一些众所周知的做法,如果你遵循它们,那么有机会变得更小的可能性:

1)教育和技能:尽量确保每个接触代码的人都知道他在做什么(而不是盲目地遵守命令"但是你告诉我做xyz,所以我坐下来做了xyz,不是考虑到后果是什么")

2)良好的设计和现有组件的重复使用。喜欢:标准java自带"已知"好套,地图,收藏品。为什么你认为你必须重新发明轮子,为什么你认为你的实施将更好"?

3)好的测试。做TDD,并确保每个新功能都有单元测试,涵盖其所有行为。然后确保当有人将代码推送到您的版本控制系统时,您的单元测试会自动运行;所以你注意到东西坏了。除此之外,为那些无法通过单元测试进行测试的方面构建合理的功能/集成测试。