如果不向自定义类提供 hashCode() 方法,对 HashSet 的性能有何影响?
如果我将自定义类对象添加到 HashSet 并且不为其提供 hashCode() 方法,它会如何影响哈希的性能?
谢谢, 阿杰
If I add custom class objects to HashSet and don't provide hashCode() methods on them, how does it impact the perfomance of hashing?
Thanks,
Ajay
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如 Nikolaus 提到的那样,库存实施速度很快并且工作得很好。当您重写 equals 方法时,您应该毫不犹豫地使用它例外。例如,如果两个 Person 对象具有相同的 getFirstName() 和 getLastName(),则它们是“相等”的,您将重写 equals 方法来检查这一点,并重写 hashCode() 以在这些值的值相同时返回相同的哈希值两个属性是相同的。
The stock implementation as Nikolaus mentions is fast and will work just fine. You should not hesitate to use it except when you are overriding the equals method. For example, if two Person objects are "equal" if they have the same getFirstName() and getLastName() you would override the equals method to check that, and also override the hashCode() to return the same hash when the values for those two properties are the same.
如果您没有定义自己的
hashCode
方法,则会调用对象的父类中的方法。如果您没有定义父级,则调用 Object 类中的hashCode
方法。根据 java api 文档,该方法根据对象的地址返回一个整数 - 但具体如何完成取决于 jvm 和操作系统。总之 - 如果您不指定任何 hashCode 方法,就像将对象放入 hashTable 中一样。
if you don't define your own
hashCode
method, the method from the parent Class of your object gets called. If you have no parent defined thehashCode
method from the Object class gets called. According to the java api documentation the method returns an integer depending on the address of the object - but how exactly this is accomplished depends on the jvm and the operating system.In summary - if you don't specify any hashCode methods it's like putting Objects in the hashTable.