转载 :http://blog.csdn.net/vking_wang/article/details/14166593
HashMap中存储数据的全局变量是“线性数组”,从结构上观察是‘数组’+‘链表’=‘hash表’
数组:存储区间连续,占用内存严重,故空间复杂度大,但数组的二分查找时间复杂度小,
为0(1);寻址容易,删除和插入难
链表:存储区间离散,占用内存较宽松,故空间复杂度很小,但时间复杂度大,为0(N);寻址困难,删除和插入难
好,两者能不能得到‘寻址’容易,‘插入删除’操作容易的结构,便是hash表,同时不占用太多的内存空间(如果同一个长度的数组和链表存储相同的内容这个占用内存空间的差异是怎么来的?具体存储实现就不研究了)
哈希表
哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法—— 拉链法,我们可以理解为“链表的数组” ,如图:
添加个Map所在的树:
HashMap
(1)非线程安全的
(2)无序的(数据不是按照存入顺序放置),和iterator每次迭代出的顺序一致不冲突
(3)