2010-03-23 43 views
0

爲什麼Java不提供函數來獲取HashSet中的鍵/值對,如Hashtable中存在的那樣?每次需要獲得某些東西時,必須迭代它似乎是一件非常痛苦的事情。還是有更簡單的方法來做到這一點?Java HashSet鍵/值對

+3

你的意思是HashMap? HashSet不包含鍵/值對。 – 2010-03-23 22:37:48

回答

8

HashSet沒有鍵/值對。它是對象的一個​​Set,您可以使用Set的實現者來確保對象集合不包含重複項。

HashMap這樣的映射的實現者具有鍵/值對,並提供一個get(Object key)方法來獲取與鍵相關聯的值。

+0

謝謝,我認爲這開始有意義。 – harley 2010-03-23 22:44:13

+0

太好了。我記得最初我有同樣的困惑,我發現我使用集合,當我需要過濾一堆對象只有唯一的對象 - 在這種情況下,我通常然後想迭代他們,並與他們的東西。當我希望能夠通過我用作關鍵字的某些值查看對象時,我使用Maps。 – Brabster 2010-03-23 22:49:04

2

由於Set不包含鍵和值,所以不可能提供這樣的視圖。

你認爲什麼是關鍵,Set的價值是什麼?

+0

我想我很困惑的文檔: 從哈希表:「這個類實現了一個哈希表,它將鍵映射到值。」 從HashSet:「這個類實現Set接口,支持一個哈希表(實際上是一個HashMap實例)。「 看看HashSet是一個HashMap和HashMap類似於Hashtable,爲什麼沒有辦法獲得鍵/值對? 如果這是一個唯一性的問題不會重寫compareTo()是否要走的路? – harley 2010-03-23 22:41:24

+1

HashSet由HashMap返回__,這意味着它在內部使用HashMap。然而這並不意味着它暴露了HashMap。 – 2010-03-23 22:42:56

+0

@Harley:正如Robert所說,HashSet中的HashMap是一個實現細節,它在外部是不可見的。下一步:如果你從來沒有**放入一個鍵/值對,那麼你期望它能看到什麼? – 2010-03-23 22:59:17

0

A Set沒有任何鍵/值對,只是(唯一)值。正如您已經說過的那樣,您可以通過Iterator或通過使用toArray()方法返回帶有這些值的數組來獲得這些值。

也許您正在尋找List來代替。