当我们想要获取一个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吗)