从Java问题映射界面

时间:2011-01-05 15:58:09

标签: java

我一直想知道java.util中的Map。

为什么values()方法返回一个Collection,而keySet和entrySet返回一个Set?

Set and Collection的优点/缺点是什么?

5 个答案:

答案 0 :(得分:6)

一个集合保证给定条目只能存在一次。收藏品没有。由于Map在值方面没有唯一性保证,因此它们的集合根本不是集合,而是必须是集合。

答案 1 :(得分:6)

这不是一个优点和缺点的问题 - 它是map的键,值和条目代表重要的。

地图中的关键字是唯一的

Map中的密钥是唯一的 - 也就是说,Map中不会有重复的密钥。确保不存在重复项的CollectionSet

因此,密钥会以keySet方式返回Set

地图中的值不一定是唯一的

另一方面,Map的{​​{3}}不一定是唯一的。

例如,我们可以在地图中创建一个条目,其中键"fruit"映射到值"apple",还有另一个条目,其中键"computer"映射到值{{ 1}}:

"apple"

允许在地图中包含重复值。

因此,我们不能使用map { key:"fruit" -> value:"apple" key:"computer" -> value:"apple" } ,因为这需要所有条目都是唯一的。对Set的值的一个很好的选择是返回一个普通的Map,因为它不会对值的含义施加任何限制。

地图中的条目也是唯一的

Collection的条目是唯一的 - 它们是键和值的组合,由values对象表示。由于此键值对是唯一的,因此Map.Entry方法将其返回为Map

进一步阅读

答案 2 :(得分:4)

地图内部管理一组键,因为键是唯一的值不是

  

返回此地图中包含的键的Set视图。该集由地图支持,因此对地图的更改将反映在集中,反之亦然。如果在对集合进行迭代时修改了映射(除了通过迭代器自己的remove操作),迭代的结果是未定义的。该集支持元素删除,它通过Iterator.remove,Set.remove,removeAll,retainAll和clear操作从地图中删除相应的映射。它不支持add或addAll操作。

另见

答案 3 :(得分:2)

SetCollection,不包含重复元素。在可能的情况下返回Set的优点是它可以明确保证唯一性。

正如其他人已经指出的那样,values()无法返回一个Set,因为值的集合可能包含重复项。

答案 4 :(得分:2)

values()可能重复,因此它是Collection

keySet()和entrySet()无法重复,因此它们是Set

ps:Set是非重复的Collection