0

在 java 中,HashSet 是使用 HashMap 实现的。因此,当我们向集合中添加项目时,会执行以下代码。

public boolean add(E e) {
    return map.put(e, PRESENT)==null;
}

将两个不同但具有相同哈希的对象添加到 HashSet 时会发生什么;它(HashSet)会包含两个对象还是会发生什么?

4

2 回答 2

5

hashmap.equals().hash(). .equals()除非返回 true ,否则两件事是不一样的。哈希集也是如此。

因此,如果两个对象不同但具有相同的哈希值,则它们都将被存储,并且都可用,因为.equals()仍然会返回false.

确实,在内部,散列用于决定存储对象的位置,但是仍然可以存储具有相同散列的多个对象(由于它变得更加复杂,因此性能略有下降,但仅此而已)。

于 2012-07-27T02:52:40.080 回答
1

是的,hashmap 将包含这两个元素。我找不到它使用的具体方法,但处理冲突的流行方法包括为每个存储桶使用链表,或者只是将元素粘贴在附近的空存储桶中。

于 2012-07-27T02:48:27.223 回答