首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-12-21 
JAVA容器浅入深出之HashMap(HashSet)这两天一直在看HashMap。 这个Map感觉很优雅啊?本来是看List,看完之后,

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苦工)

   谢谢啊 3 楼 com0606 2011-10-06   感觉Map,HashMap就是弄懂其他容器的基础啊,可惜现在才开始看……
引用从明天开始要开始实战了。 做项目,实践自己的理论知识!
杯具啊……

热点排行