Map的keySet()与values()方法

当我们想要获取一个Map中的所有键或者值时,会发现Map()已经有对应的方法:

keySet()方法:返回Map中所有键的Set<>

values()方法:返回Map中所有值的Collection<>

但是这里有一个需要注意的问题是,从keySet()文档与values()文档中我们可以发现

图1.keySet()文档

图2.values()文档

文档中说明,keySet()返回的是Map中键的映射,values()返回的是Map中值的映射,对Map中所作的一切修改均会反映到返回的两个集合中,反之亦然

也就是说,如果你在keySet()或values()返回的集合中进行了增添或者删除等操作,Map()中的键(值)同样会受到影响

因此,当我们调用两个方法获取Map()中的键与值时,一定要注意:返回的集合是对Map()对应值的引用,而非复制。如果想要对其键(值)集合进行操作而不对Map造成影响,需要重新建立集合并将keySet()与values()返回集合中的键(值)全部添加进去,而非直接在其返回的集合上进行操作

(话说,这难道不是不符合Safety from rep exposure吗)

posted @ 2018-04-06 20:03  always_new  阅读(727)  评论(0编辑  收藏  举报