1

我想知道,既然 HashSet 是通过 HashMap 实例实现的,那么用于将数据放入 HashSet 的键是什么。

我浏览了链接http://www.coderanch.com/t/251832/Programmer-Certification-SCJP/certification/Difference-HashMap-HashSet ...

我没有正确理解..任何人都可以帮助我更好地理解它

4

4 回答 4

6

从来源:

// 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;
}
于 2010-02-12T05:47:23.600 回答
5

键将是进入散列集本身的对象,因为映射的键是集合。

于 2010-02-12T05:44:04.653 回答
1

这个想法是使用您添加到的对象HashSet作为HashMap. 这样addremove, 和contains在 O(1) 中运行。

于 2010-02-12T05:55:05.910 回答
0

是的(这里有源代码)。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-09-08T16:04:54.720 回答