黑马程序员技术交流社区

标题: 集合框架map集合中keySet()方法的疑问! [打印本页]

作者: 昝文萌    时间: 2013-8-28 16:59
标题: 集合框架map集合中keySet()方法的疑问!
本帖最后由 昝文萌 于 2013-8-29 08:43 编辑

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

作者: 白磊    时间: 2013-8-28 17:17
对于你的疑问  ,应该是这样的:
   map本来就是一个 存放 键值对  的集合,你通过 keySet()方法得到map的set集合,至于这个返回的这个set集合是通过什么结构实现的,这个就要看这个map到底是怎样的map了,如果map是HashMap,那么返回的set集合就是HashSet了,如果这个map是TreeMap的话,那么返回的set集合就是TreeSet了。
作者: iBadboy    时间: 2013-8-28 18:28
记得视频里老师似乎说过,Set底层就是使用了Map集合,keyset应该是跟map的结构一样吧。。。
作者: 肥猫    时间: 2013-8-28 19:44
Set集合下的实现类,只是底层结构不一样,看源玛就知道了,几乎全都是直接调用MAP集合来实现的,连方法都是这样的。
作者: 328078121    时间: 2013-8-28 23:46
看来楼主并未仔细看视频噢,set集合很多方法是调用map中的方法,所以不同的map底层结构,返回不同类型set集合。就像是2个数相加的方法,其实调用的是3个数相加的方法,第三个数赋个0。这个情况在java中很普遍,复杂的都搞出来了,简单的调用复杂的不就OK了~~




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