HashMap
HashMap是基于Hashing(哈希)原理,通过put()和get()方法来存储和获取对象。
HashMap的来源:
数组的特点是:寻址容易,插入和删除困难;
而链表的特点是:寻址困难,插入和删除容易。
那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?HashMap应运而生。HashMap的实现方式如下图:
左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表(桶)的头,当然这个链表可能为空,也可能元素很多。
1、利用key的hashCode重新hash计算出当前对象的元素在数组中的下标
2、存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同(通过equals),则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中
3、获取时,直接找到hash值对应的下标,在进一步判断key是否相同(通过equals),从而找到对应值。
优点:不论哈希表中有多少数据,查找、插入、删除(有时包括删除)只需要接近常量的时间即0(1)的时间级。实际上,这只需要几条机器指令。
缺点: