我在想,因为HashSet是通过HashMap实例实现的,那么将用于将数据放入HashSet中的关键字是什么。是通过HashMap实例HashSet实现
我通过链接http://www.coderanch.com/t/251832/Programmer-Certification-SCJP/certification/Difference-HashMap-HashSet不见了......
我凭着正确的理解.. 任何人可以帮助我更好地理解它
我在想,因为HashSet是通过HashMap实例实现的,那么将用于将数据放入HashSet中的关键字是什么。是通过HashMap实例HashSet实现
我通过链接http://www.coderanch.com/t/251832/Programmer-Certification-SCJP/certification/Difference-HashMap-HashSet不见了......
我凭着正确的理解.. 任何人可以帮助我更好地理解它
的关键将是走进了HashSet的本身,因为对象地图的关键是集合。
当你说“地图的钥匙是套”时,你是什么意思? – danben 2010-02-12 05:47:42
地图的一个键总是会映射到相同的值,所以所有的地图键都必须是唯一的。所以根据定义,它们是集合。 – 2010-02-12 05:54:35
或者如果你看看Map.keySet(),它会返回一个Set。 – 2010-09-14 20:58:37
从来源:
// 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
的主要对象。这样在O(1)中运行add
,remove
和contains
。
是(source code here)。 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!
你可以通过查看源代码轻松地回答这个问题! – 2010-02-12 05:47:26