这里我采用的分析方式是帖子博客加上本身翻看jdk源码。有些状况下写一些测试的算法小例子加深印象。我这里只描述一下本身的总结想法 html
上一篇文章咱们研究了set接口下的几个容器,因为其Set集合设计时底层的数据模型是Map,Set的实现是基于Map的、因此先搞懂Map、才能去理解Set、不然的话、直接去弄Set会以为云里雾里、最后发现是浪费时间。这一节介绍关于Map的相关接口、抽象类的功能。java
1、Map集合结构体系图(网络图,侵删)算法
这篇文章主要对TreeMap,HashMap和LinkedHashMap作分析,其余不经常使用的先不进行分析,另外针对HashTable和ConcurrentHashMap这两个线程安全的Map着重开一章去整理数组
2、源码分析 安全
一、HashMap源码分析网络
上帖子:http://www.cnblogs.com/chengxiao/p/6059914.html数据结构
总结:源码分析
(1)首先重点了解一下哈希表的数据结构,测试
哈希表(散列)主要利用数组和链表的方式。利用这种方式就能够避免单个数组出现的修改删除的高时间复杂度,又避免了聊表查询的高时间复杂度,具体实现方式请参看上边的博客,具体的讲解了目前的主要数据结构以及哈希表结构.net
(2)知道了哈希表的数据结构,就能理解HashMap的存储方式了,HashMap就是利用数组+链表的方式进行数据存储。博客中也对主要的添加,删除,修改方法进行了源码详解。在看源码的过程当中注意细节
二、LinkedHashMap源码分析
发布一个描述LinkedHashMap的博客:http://www.cnblogs.com/chenpi/p/5294077.html
三、TreeMap源码分析
发布一个描述TreeMap的博客:http://www.cnblogs.com/wzyxidian/p/5204879.html
3、区别对比
一、相同点
二、不一样点
4、总结
三种类型分别在何时使用
一、通常状况下,咱们用的最多的是HashMap。HashMap里面存入的键值对在取出的时候是随机的,它根据键的HashCode值存储数据,根据键能够直接获取它的值,具备很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。
二、TreeMap取出来的是排序后的键值对。但若是您要按天然顺序或自定义顺序遍历键,那么TreeMap会更好。
三、LinkedHashMap 是HashMap的一个子类,若是须要输出的顺序和输入的相同,那么用LinkedHashMap能够实现,它还能够按读取顺序来排列,像链接池中能够应用。