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