2010-02-12 98 views

回答

5

的關鍵將是走進了HashSet的本身,因爲對象地圖的關鍵是集合。

+0

當你說「地圖的鑰匙是套」時,你是什麼意思? – danben 2010-02-12 05:47:42

+2

地圖的一個鍵總是會映射到相同的值,所以所有的地圖鍵都必須是唯一的。所以根據定義,它們是集合。 – 2010-02-12 05:54:35

+0

或者如果你看看Map.keySet(),它會返回一個Set。 – 2010-09-14 20:58:37

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; 
} 
+0

有趣;我一直認爲它會放(e,e)。 – 2010-02-12 08:03:33

+0

爲什麼不只是使用空值? – dertoni 2010-08-03 13:07:03

+2

@dertoni:當然,我沒有寫它,但我的猜測是他們想要允許HashMap的不同支持實現,這將不保證允許空值。 – danben 2010-08-03 14:40:38

1

的想法是使用您添加到HashSet作爲HashMap的主要對象。這樣在O(1)中運行add,removecontains

0

是(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!