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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 昝文萌 中级黑马   /  2013-8-28 16:59  /  1656 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 昝文萌 于 2013-8-29 08:43 编辑

map集合中定义的keySet方法是Set<K> keySet(),它的返回值应该是一个Set接口类型的子类对象,但是通过查阅API,发现实现Set接口的类他们在底层的实现方式都不一样,比如TreeSet是基于二叉树的结构,HashSet是基于哈希表的结构,那这个返回的Set接口类型的子类对象是通过什么结构实现的!求大神!

评分

参与人数 1技术分 +1 收起 理由
黄兴旺 + 1

查看全部评分

4 个回复

倒序浏览
对于你的疑问  ,应该是这样的:
   map本来就是一个 存放 键值对  的集合,你通过 keySet()方法得到map的set集合,至于这个返回的这个set集合是通过什么结构实现的,这个就要看这个map到底是怎样的map了,如果map是HashMap,那么返回的set集合就是HashSet了,如果这个map是TreeMap的话,那么返回的set集合就是TreeSet了。
回复 使用道具 举报
记得视频里老师似乎说过,Set底层就是使用了Map集合,keyset应该是跟map的结构一样吧。。。
回复 使用道具 举报
Set集合下的实现类,只是底层结构不一样,看源玛就知道了,几乎全都是直接调用MAP集合来实现的,连方法都是这样的。
回复 使用道具 举报
看来楼主并未仔细看视频噢,set集合很多方法是调用map中的方法,所以不同的map底层结构,返回不同类型set集合。就像是2个数相加的方法,其实调用的是3个数相加的方法,第三个数赋个0。这个情况在java中很普遍,复杂的都搞出来了,简单的调用复杂的不就OK了~~
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马