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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Hawking 中级黑马   /  2016-4-6 23:12  /  607 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1. HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的,只不过Set用的只是Map的key

2. Map的key和Set都有一个共同的特性就是集合的唯一性.TreeMap更是多了一个排序的功能.

3. hashCode和equal()是HashMap用的, 因为无需排序所以只需要关注定位和唯一性即可.

a. hashCode是用来计算hash值的,hash值是用来确定hash表索引的.

b. hash表中的一个索引处存放的是一张链表, 所以还要通过equal方法循环比较链上的每一个对象 才可以真正定位到键值对应的Entry.

c. put时,如果hash表中没定位到,就在链表前加一个Entry,如果定位到了,则更换Entry中的value,并返回旧value

4. 由于TreeMap需要排序,所以需要一个Comparator为键值进行大小比较.当然也是用Comparator定位的.

a. Comparator可以在创建TreeMap时指定

b. 如果创建时没有确定,那么就会使用key.com


8 个回复

倒序浏览
那么HashSet的底层是什么数据结构呢?数组还是链表呀?
回复 使用道具 举报
荒丶 发表于 2016-4-7 00:33
那么HashSet的底层是什么数据结构呢?数组还是链表呀?

HashMap实际上是一个“链表的数组”的数据结构,每个元素存放链表头结点的数组,即数组和链表的结合体。
也就是说HashMap底层就是一个数组结构,数组中的每一项又是一个链表。当新建一个HashMap的时候,就会初始化一个数组.Entry就是数组中的元素,每个 Map.Entry 其实就是一个key-value对,它持有一个指向下一个元素的引用,这就构成了链表。

个人理解,错了莫怪!!
回复 使用道具 举报
分析的很有道理
回复 使用道具 举报

过奖!!
你的看法呢?
集思广益嘛!
回复 使用道具 举报
赞赞赞!!!
回复 使用道具 举报
666明天才开讲Map
回复 使用道具 举报
我是进来学习的
回复 使用道具 举报
腾龙3158 来自手机 中级黑马 2016-4-8 00:37:08
9#
学习了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马