为什么我们有地图时需要设置?

时间:2014-05-02 01:22:54

标签: java collections map set

从存在的角度来看,集合本质上是地图。我认为没有任何地图无法做到的地图。我们有这些在Maps中定义键值对的开销,而Set中没有。但是Set的元素再次只是底层Map的关键,对吧?那么,当Maps能够完成所有需要的东西时,有什么意义呢?我希望Set占用与Map相同的内存量?

支持存在集合的关键论点是什么?

例如,在Lists的情况下,我们有ArrayList和LinkedList有差异,我们可以根据我们的要求在这两者之间进行选择。

2 个答案:

答案 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只保留键,而且它们是唯一的。