2017-07-30 51 views

回答

0

不僅僅是方便,而且在大多數虛擬機上效率並不高。所以Java - 至少在某些實現中 - 不會做任何更奇怪的事情。

1

一個HashSet可以被認爲是在你不真正關心值的類型,只有某個值是否與特定鍵相關聯的一個HashMap的特殊情況。

因此,只實施一個在另一個之上是有意義的。 如果您的密鑰類型具有良好的散列函數,則HashMap是一個不錯的選擇。

同樣,TreeSet的使用TreeMap的,如果你的鑰匙是有序/媲美,因而可以有效實現。

您可以實現在許多其他方面的設置界面,但這些都是典型的。

0

由於HashMap和HashSet的是basicly使用相同的算法,它是簡單不執行兩次,因此這並不奇怪那幾個,如果不是全部,JVM實現做到這一點。 它也適用於LinkedHashMap/Set,TreeMap/Set等。

更一般地,可以通過選擇價值爲相同爲重點,以創建任何地圖任何實現的Set實現,或者是一個常量。內存存儲的損失可以忽略不計。

順便說,該JDK提供Collections.newSetFromMap方法,該方法不正是這樣的:它由所有的鍵映射到一個Boolean.TRUEMap<E,Boolean>Set<E>轉換。當Map 1沒有相應的Set實現時,該實用程序方法非常有用,例如對於ConcurrentHashMap。

相反,創建從Set一個Map實現,也是可行的,儘管它稍微困難一些。