在 java 中,HashSet 是使用 HashMap 实现的。因此,当我们向集合中添加项目时,会执行以下代码。
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
将两个不同但具有相同哈希的对象添加到 HashSet 时会发生什么;它(HashSet)会包含两个对象还是会发生什么?
hashmap.equals()
和.hash()
. .equals()
除非返回 true ,否则两件事是不一样的。哈希集也是如此。
因此,如果两个对象不同但具有相同的哈希值,则它们都将被存储,并且都可用,因为.equals()
仍然会返回false
.
确实,在内部,散列用于决定存储对象的位置,但是仍然可以存储具有相同散列的多个对象(由于它变得更加复杂,因此性能略有下降,但仅此而已)。
是的,hashmap 将包含这两个元素。我找不到它使用的具体方法,但处理冲突的流行方法包括为每个存储桶使用链表,或者只是将元素粘贴在附近的空存储桶中。