Java 哈希集在何处存储哈希代码与集中已有哈希代码匹配的对象?

Java 哈希集在何处存储哈希代码与集中已有哈希代码匹配的对象?,java,collections,Java,Collections,我知道具有相同哈希代码的对象不一定是相同的。我的问题是:如果一个hashset遇到一个hashcode与hashset中已有对象的hashcode匹配的对象,但如果对象不相等,hashset会向其中添加新对象吗?会,因为对象实际上并不相同。会,因为对象实际上并不相同。是,它将添加新对象。它不会替换,因为它们不相等。是,它将添加新对象。它不会替换,因为它们不相等。哈希代码不需要相同,只需映射到同一个bucket即可。HashSet基于HashMap,因此其行为取决于HashMap equals()

我知道具有相同哈希代码的对象不一定是相同的。我的问题是:如果一个hashset遇到一个hashcode与hashset中已有对象的hashcode匹配的对象,但如果对象不相等,hashset会向其中添加新对象吗?

会,因为对象实际上并不相同。

会,因为对象实际上并不相同。

是,它将添加新对象。它不会替换,因为它们不相等。

是,它将添加新对象。它不会替换,因为它们不相等。

哈希代码不需要相同,只需映射到同一个bucket即可。HashSet基于HashMap,因此其行为取决于HashMap

equals()返回的两个键/元素
false
不相同


Java中的HashMaphashcode不需要相同,它只需要映射到同一个bucket。HashSet基于HashMap,因此其行为取决于HashMap

equals()返回的两个键/元素
false
不相同


Java中的HashMap
HashSet
在内部使用一个值为常量的
HashMap
,键为set元素。因此,行为是相同的:如果hashcode相等,但对象不相等,则会进行冲突处理,并将对象放入已解析bucket的链接列表中。

HashSet
内部使用一个
HashMap
,值为常量,键为set元素。因此,行为是相同的:如果hashcode相等,但对象不相等,则会进行冲突处理,并将对象放入已解析bucket的链接列表中。

我相信它只是丢弃了重复项,而代之以原始项。但是你只是在代码中尝试过吗?对象不是重复的;它们只有相同的哈希代码。我正在发布我的代码。我在我的手机上,没有GrepCode链接,但实现是开源的。我相信它只是丢弃了重复的代码,而支持原来的代码。但是你只是在代码中尝试过吗?对象不是重复的;它们只有相同的哈希代码。我正在发布我的代码。我在手机上,没有GrepCode链接,但实现是开源的。