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