黑马程序员技术交流社区

标题: map.keySet()返回值问题 [打印本页]

作者: 黑马张旭明    时间: 2012-8-21 17:32
标题: map.keySet()返回值问题
Map<String,String> map = new HashMap<String,String>();
         map.put("02","zhangsan2");
         map.put("03","zhangsan3");
         map.put("01","zhangsan1");
         map.put("04","zhangsan4");
         Set<String> keySet = map.keySet();

看到这段代码有个疑惑,map.keySet()返回一个Set类型的对象,Set是个接口,那这里返回的是不是个HashSet对象?如果我把第一行的HashMap改成TreeMap的话,map.keySet()返回的是不是又会不一样,是个TreeSet对象?

另外,想问下API文档在哪找啊。

作者: 刘芮铭    时间: 2012-8-21 17:49
HashMap的keyset方法返回的set并非是一个对象,即不会产生新对象,而是对HashMap底层key的一个视图,准确的说应该直接指向了Map的key的内存区域,不论执行多少次,返回的set都是指向的同一个内存区域。当你对keyset返回的set进行操作会直接导致对HashMap进行的操作。如从set删除一个值,那么会导致hashmap中的key-value直接被删除掉。
作者: 刘芮铭    时间: 2012-8-21 17:50
文档楼主可以在网上找  或者去SUN官网下载
下面是摘自API帮助文档的说明

keySet
public Set<K> keySet()返回此映射中所包含的键的 set 视图。该集合受映射的支持,所以映射的变化也反映在该集合中,反之亦然。该集合支持元素的移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作,从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。

指定者:
接口 Map<K,V> 中的 keySet
覆盖:
类 AbstractMap<K,V> 中的 keySet
返回:
此映射所包含的键的 set 视图。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2