我在想,因爲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