http://www.cnblogs.com/anywei/archive/2011/10/27/2226830.html
http://blog.chinaunix.net/uid-20773165-id-1847822.html
map和hashmap还是有区别的。
hash_map和map的区别在哪里?
总体来说,hash_map 查找速度会比map快,而且查找速度基本和数据数据量大小,属于常数级别;而map的查找速度是log(n)级别。并不一定常数就比log(n)小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash_map。但若你对内存使用特别严格,希望程序尽可能少消耗内存,那么一定要小心,hash_map可能会让你陷入尴尬,特别是当你的hash_map对象特别多时,你就更无法控制了,而且hash_map的构造速度较慢。
现在知道如何选择了吗?权衡三个因素: 查找速度, 数据量, 内存使用。
http://blog.csdn.net/vking_wang/article/details/14166593
数组的特点是,寻址容易,但是插入和删除困难。因为它需要移动被修改元素后面的若干元素位置。
链表的特点是,寻址困难,但是插入和删除容易。
Hashmap就是中和了数组和链表的有点,找到了一个寻址容易同时插入删除也容易的方法,它采用的是数组+链表的实现方式。
HashMap里面有一个静态内部类,重要的属性有key,value和next..Hashmap的基础就是一个线性数组,这个数组就是Entry[],Map的内容存放在Entry[]里面。
在一个长度为len的数组中,每一个元素存放的是一个链表的头结点。这些元素是通过什么样的方式存放在数组中呢?一般是通过取模的方式,key%len获得。
如何对hashmap进行存取呢?
如果两个key通过key%len获得的数组index相同,会不会覆盖?不会。Entry类中有一个next属性,作用是指向下一个Entry.比如说第一个键值对A进来,通过该计算key的hash得到数组的Index=0,则Entry[0]=A。如果一会又来一个键值对B,通过计算Index同样也是0,那么Hashmap会这么做:B.next=A,Entry[0]=B.这样通过next,就将所有的键值对串联起来了,形成了一个链表。