JAVA容器浅入深出之HashMap(HashSet)

这两天一直在看HashMap。 这个Map感觉很优雅啊

 

本来是看List,看完之后,接着看Set的,发现Set实现的底层大都是利用的Map。 只好扭过头看Map了

 

HashSet底层就是一个HashMap, 这个HashSet保存数据,只保存key。 value是一个通用的无效对象(不会被访问的对象,好像是空对象吧。。。没注意)

TreeSet底层就。。。和二叉树的目前真是不会, 太费脑子了。。。暂且会用即可

 

Map里面我感觉主要有两中实现

一种就是HashMap(HashTable和他差不多)

一种就是TreeMap(表示这个Map的底层真的看不明白。。。只知道是二叉树实现的,但是二叉树本来就不太了解,所以就悲剧了。。。)

 

HashMap的底层啊,我感觉就是数组和链表的双重保存。 但是这个数组的访问,它不是想ArrayList一样,野蛮的遍历一遍。 而是将存入的新mapping保存为一个Entry, Entry.hash就是key.hashCode()。  然后HashMap使用一个indexOf静态方法,将指定key的哈希值和table.length “&” 一下。 得到新的Entry应该保存的index, 然后将这个新的Entry保存到table[index]中, 当然了, 不同对象的哈希值可能是一样的, 于是如果同一个table[index]如果元素超出一个的话, 就采用链表的方式保存。 因此。 一个HashMap的table[]中, 不是说每一个index上都有元素,也不是说每一个index上都只有一个元素。 而是随意分布的。 可能table[index]上为空, 而table[index+1]上却是一串Entry链表

 

个人感觉这个HashMap太精辟了

即利用了LinkedList的链表添加元素快捷又避免了LinkedList那样的链表过长导致的索引浪费资源

即利用了ArrayList的数组操作方便又避免了ArrayList那样的结构变化频繁导致的重构资源浪费(个人感觉HashMap的重构频率远远低于ArrayList)

 

差不多了, 好几天了,一直琢磨Collection的代码, 从明天开始要开始实战了。 做项目,实践自己的理论知识!

计划大二结束前, 完成自己学习计划的第二阶段。 大三主攻第三阶段, 争取将来进入社会是以一个有独特编程思想和构架能力的设计师。 而不是一个到处泛滥的码字员(SSH苦工)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值