java方法在hashset中重写
我开发了一个应用程序,可以使用hashset概念。我必须重写hashset中的equals()、hashCode()和toString()方法。我不知道为什么要覆盖给定的方法。请任何人告诉我发生了什么,而不推翻上述方法
你可以在下面搜索框中键入要查询的问题!
我开发了一个应用程序,可以使用hashset概念。我必须重写hashset中的equals()、hashCode()和toString()方法。我不知道为什么要覆盖给定的方法。请任何人告诉我发生了什么,而不推翻上述方法
# 1 楼答案
假设您希望覆盖}的正常功能至关重要,就像{}。重写
HashSet
中要使用的对象,而不是HashSet
本身中的方法,那么这样做的原因是,将对象放入HashSet
中会得到预期的结果hashCode()
尤其对{toString()
的主要原因是,您将得到一些对该对象有意义的表示,而不是该方法的默认Object
版本从本质上讲,如果不重写这些方法,
HashSet
将无法实现预期的效果。例如,假设我有一个类Foo
,其中我没有重写方法我创建了两个在所有方面都相等的对象
Foo1
和Foo2
,但我没有覆盖equals()
或hashCode()
java不会认为这些是相等的,即使我可以看到它们是相等的,因为我没有解释如何通过覆盖^ {< CD6>}来比较它们。如果打印hashCode()的值,我将看到分配给不同对象的不同整数值,如下所示:
因此,如果我将它们添加到
HashSet
,它会很高兴地将两个对象都放在那里,而我实际上只希望其中一个放在那里Here是一个类似的问题,是关于使用这些方法的面试问题
# 2 楼答案
怎么样
同样的方法也适用于要存储在哈希集中的对象
# 3 楼答案
例如,请阅读以下内容: http://www.javamex.com/tutorials/collections/hash_code_equals.shtml
其他地方也有很多关于这个主题的讨论(我推荐有效的Java书籍)
您不需要重写toString(),这是一个额外的功能
基本上,如果不重写equals,就无法按预期的方式从集合中获取内容。例如,如果你的字符串类没有以有意义的方式实现equals,那么集合。获取(“abc”)和收集。get(新字符串(“abc”)会给你不同的结果