从存在的角度来看,集合本质上是地图。我认为没有任何地图无法做到的地图。我们有这些在Maps中定义键值对的开销,而Set中没有。但是Set的元素再次只是底层Map的关键,对吧?那么,当Maps能够完成所有需要的东西时,有什么意义呢?我希望Set占用与Map相同的内存量?
支持存在集合的关键论点是什么?
例如,在Lists的情况下,我们有ArrayList和LinkedList有差异,我们可以根据我们的要求在这两者之间进行选择。
答案 0 :(得分:2)
我认为Map
实际上是Set
!
Map<Key,Value>
可以使用Set<Entry<Key,Value>>
这类似于集合,映射和函数的数学基础。
首先,我们是否同意Map
是来自Key=>Value
(或Domain=>Range
)的函数。每个键最多对应一个值,因此它是部分函数(或仅在映射中的那些键上的完整函数)。所以地图就是一个功能。 (Scala甚至让Map实现了Function1接口。)
其次,什么是功能? A function is a set of tuples where each first element occurs only once in the set。元组的第二个元素是函数返回的值。
所以我们有Map is a Function is a Set
。
实际上,Set
有很好的理由。从概念的角度来看,它们通常是正确的数据结构,甚至在您开始担心性能之前。在大多数情况下,我会在List
上使用它们。
答案 1 :(得分:0)
Set和Map之间的主要区别在于Map为每个Entry保存两个对象,例如键和值,它可能包含重复值,但键始终是唯一的。但是Set只保留键,而且它们是唯一的。