【问题标题】:how change in hashcode implementation effect on hashSethashcode 实现的变化如何影响 hashSet
【发布时间】:2016-08-29 11:16:11
【问题描述】:

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

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

2>如何防止哈希码实现发生变化

【问题讨论】:

  • 你是什么意思“改变运行时间”?
  • 如果你改变了hashcode的实现,那么你编译并重新部署了新的代码,所以当你重新启动你的代码时你不得不重建hashset,那么问题是什么?

标签: java data-structures collections hashmap


【解决方案1】:

通常,答案是:视情况而定。

假设您更改了某个类的 hashCode() 实现。

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

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

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

1) 教育和技能:尽量确保每个接触代码的人都知道他在做什么(而不是盲目地听从命令“但是你告诉我要做 xyz,所以我坐下来完全做了 xyz,根本没有考虑后果是什么”)

2) 良好的设计,以及对现有组件的重用。喜欢:标准 java 带有“已知的”好的集合、地图、集合。为什么你认为你必须重新发明轮子,为什么你认为你的实现会“更好”?

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

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 2017-11-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多