我想知道,既然 HashSet 是通过 HashMap 实例实现的,那么用于将数据放入 HashSet 的键是什么。
我没有正确理解..任何人都可以帮助我更好地理解它
我想知道,既然 HashSet 是通过 HashMap 实例实现的,那么用于将数据放入 HashSet 的键是什么。
我没有正确理解..任何人都可以帮助我更好地理解它
从来源:
// Dummy value to associate with an Object in the backing Map
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
键将是进入散列集本身的对象,因为映射的键是集合。
这个想法是使用您添加到的对象HashSet
作为HashMap
. 这样add
,remove
, 和contains
在 O(1) 中运行。
是的(这里有源代码)。HashSet 本质上是 HashMap 的 keySet 的接口。
/**
* HashSet is an implementation of a Set. All optional operations (adding and
* removing) are supported. The elements can be any objects.
*/
public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable,
Serializable {
private static final long serialVersionUID = -5024744406713321676L;
transient HashMap<E, HashSet<E>> backingMap; // right here!