是否存在使用HashMap实现HashSet的问题?

时间:2012-07-27 02:41:10

标签: java hashmap hashset

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

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

当两个不同但具有相同散列的对象被添加到HashSet时会发生什么;它(HashSet)是否包含对象或当时会发生什么?

2 个答案:

答案 0 :(得分:5)

hashmap使用.equals()以及.hash()。除非.equals()返回true,否则两件事情不一样。对于hashset也是如此。

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

确实,在内部,散列用于决定存储对象的位置,但仍然可以存储具有相同散列的多个对象(由于它变得更复杂,所以会有轻微的性能损失)。< / p>

答案 1 :(得分:1)

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