A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马张旭明 中级黑马   /  2012-8-21 17:32  /  1847 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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文档在哪找啊。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

2 个回复

倒序浏览
HashMap的keyset方法返回的set并非是一个对象,即不会产生新对象,而是对HashMap底层key的一个视图,准确的说应该直接指向了Map的key的内存区域,不论执行多少次,返回的set都是指向的同一个内存区域。当你对keyset返回的set进行操作会直接导致对HashMap进行的操作。如从set删除一个值,那么会导致hashmap中的key-value直接被删除掉。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
文档楼主可以在网上找  或者去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 视图。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马