2015-08-24 59 views
0

我正在學習本網站上的Collection Framework:http://way2java.com/collections/hashtable-about/。閱讀Hashtable所有方法之後,我看到了兩種方法來訪問表的鍵:Java中的Hashtable中的Set keys()和Set keyset()之間有什麼區別?

  1. Set keys():返回一個包含所有鍵

  2. Set keySet()一個Set對象:返回一個包含的所有鍵Set對象Hashtable。一種相似性是HashtableSet不允許重複。添加和刪​​除在Set元素也體現在Hashtable

它們都返回一個Set對象。我沒有看到他們之間的不同。任何人都可以告訴我這個嗎?

+4

不要從那裏學習。看起來它已經過時了,特別是如果它教你過時的'Hashtable'類。改爲使用'HashMap',它的定義也更好。請注意'Hashtable'是'Java 1.0中引入的Legacy類'的評論。 – Kayaman

+1

['keys()'](http://docs.oracle.com/javase/6/docs/api/java/util/Hashtable.html#keys())不會返回一個'Set',它會返回一個'Enumeration '。 –

+0

這個網站是非常好的邏輯..我喜歡它,我學習Hashtable,因爲我想知道HashMap和Hashtable之間的差異。 –

回答

3

keys()不返回Set,它返回Enumeration<K>

Hashtable是一個非常傳統的類不再推薦使用。它被替換爲HashMapConcurrentHashMap。它在JCF之前就已存在,因此在開始時獲取密鑰的標準方式是通過Enumeration--用於移動對象集合的原始Java接口。然後來到Java 1.2和JCFHashtable針對Map接口進行了改進,keySet()方法返回了Set(也與JCF一起引入)。由於兼容性原因,保留了keys方法。來自新方法返回的Set實現了兩件事情:

  1. 傳達意圖 - 它強化了這樣一個事實:Hashtable的鑰匙是數學集合
  2. 實現Iterable<T>,它取代Enumerable<T>

來自Hashtable文檔:

從Java 2平臺v1.2開始,這個類被改進以實現Map接口,使其成爲Java Collections Framework的成員。與新的集合實現不同,Hashtable是同步的。如果不需要線程安全的實現,建議使用HashMap來代替Hashtable。如果需要線程安全的高度並行實現,則建議使用ConcurrentHashMap代替Hashtable。

1

的方法keys()在哈希表實際上返回鍵的枚舉:

Enumeration<K> keys() 

返回鍵的枚舉此哈希表中。

1

Hashtable是一個古老的,過時的,一流的,在Java中存在於Java 1.2的(引進standard collections framework之前!),並且被改裝以遵守接口。

keys()存在於原始Hashtable中,並返回密鑰的EnumarationkeySet()是在Map界面中引入的更現代的方法,並返回密鑰的Set

+0

@非常感謝。 –

相關問題