爲什麼它像內部散列集只使用散列映射?這與表演有關嗎?散列集內部可以使用其他集合而不是散列映射
2
A
回答
0
不僅僅是方便,而且在大多數虛擬機上效率並不高。所以Java - 至少在某些實現中 - 不會做任何更奇怪的事情。
1
一個HashSet可以被認爲是在你不真正關心值的類型,只有某個值是否與特定鍵相關聯的一個HashMap的特殊情況。
因此,只實施一個在另一個之上是有意義的。 如果您的密鑰類型具有良好的散列函數,則HashMap是一個不錯的選擇。
同樣,TreeSet的使用TreeMap的,如果你的鑰匙是有序/媲美,因而可以有效實現。
您可以實現在許多其他方面的設置界面,但這些都是典型的。
0
由於HashMap和HashSet的是basicly使用相同的算法,它是簡單不執行兩次,因此這並不奇怪那幾個,如果不是全部,JVM實現做到這一點。 它也適用於LinkedHashMap/Set,TreeMap/Set等。
更一般地,可以通過選擇價值爲相同爲重點,以創建任何地圖任何實現的Set實現,或者是一個常量。內存存儲的損失可以忽略不計。
順便說,該JDK提供Collections.newSetFromMap
方法,該方法不正是這樣的:它由所有的鍵映射到一個Boolean.TRUE
Map<E,Boolean>
成Set<E>
轉換。當Map 1沒有相應的Set
實現時,該實用程序方法非常有用,例如對於ConcurrentHashMap。
相反,創建從Set
一個Map實現,也是可行的,儘管它稍微困難一些。
相關問題
- 1. 使用其他散列構造散列
- 2. 集合的增量散列
- 3. 如何從散列映射
- 4. 限定使用散列映射
- 5. 爲什麼Python集不可散列?
- 6. 爲有序集合組合散列
- 7. 如何將散列內部的散列合併到perl中?
- 8. Perl:使用引用有其他散列
- 9. 如何被散列映射在內部使用鏈表或陣列
- 10. 如何從兩個散列創建單個散列,其中一個散列的值是另一個散列的鍵子集的子集?
- 11. 如何將內存映射到散列映射到文件
- 12. 使用SHA1作爲鏈中最內部散列的散列
- 13. 使用功能散列的羣集
- 14. 散列集的淺拷貝
- 15. 比較兩個散列集
- 16. 散列集打印問題
- 17. 如何比較單個哈希映射的值,而不使用其他集合
- 18. 使用LINQ映射集合
- 19. 集合映射使用Automapper
- 20. 密鑰是否有散列表映射到內存位置?
- 21. 使用映射突變可變集合?
- 22. 是否可以使用EF4.x映射值對象的集合?
- 23. Android實現包含另一個散列映射的包含散列映射的可包含對象
- 24. 按其散列值對字符串集合進行分組
- 25. 集合映射
- 26. 轉換陣列散列使用grep和映射在Perl
- 27. 何時使用分佈式散列表而不是「傳統」散列表?
- 28. 將一個散列鍵與其他散列值進行比較
- 29. Clojure散列映射查詢鍵和值
- 30. 爪哇散列映射方法。放()
不,這是因爲名稱。如果它使用了別的東西,它不會被稱爲'HashSet'。 – Henry