HashMap的基本知识点:

0,hashmap能存放null键和null值;

    1,hashmap存放的是键值对数据,也就是Map.Entry实例;

哈希表的;

    3,hashmap里面的键值对数据的key是唯一的,不允许重复;

初始容量指的是实例化hashmap时设定的hashmap的初始容量;

条目数指的是hashmap现在容纳的映射关系数量,也就是hashmap现在容纳的Entry的数量;

加载因子,指的实例化hashmap时设定的加载因子,它是衡量hashmap的装载程度的一个数;

rehash操作;

rehash操作指的是hashmap因条目数过大,而要进行扩容的操作,这个操作会改变hashmap的内部结构,相当消耗性能,所以我们要尽量避免hashmap进行rehash操作;

冲突指的是出现,key不一样,但是key对应的哈希码相同的情况,出现冲突,链表就会增长,取数据时遍历链表就要消耗更长的时间,影响hashmap的性能,所以我们要尽量避免冲突;

哈希表:

     哈希表是一种存取都高效的数据结构,由链表和数组组成,数组存放的是链表;

     存放数据时,通过哈希函数,得到哈希码,从而得到存放数据的位置,也就是数组的下标,然后存进数组中对应该下标的元素,也就是把数据插入链表;

   读取数据时,通过哈希函数,得到哈希码,从而得到数组的下标,然后遍历该链表,找到该数据;

HashMap的原理:

存放数据时,也就是put时,调用key的hashCode()方法,取得hashCode,从而确定数组的下标,然后把entry存到对应的数组元素里面,也就是插入该数组元素对应的链表;

     取数据时,也就是get时,调用key的hashCode()方法,取得hashCode,从而确定数组的下标,然后遍历链表,调用key的equals()方法,找到对应的entry,返回该entry;

影响HashMap性能的因素:

初始容量,初始容量设置得太小可能会让HashMap进行频繁的rehash操作,从而影响HashMap的性能;设置得太大会使HashMap占用过大的空间;

     加载因子,加载因子过大会使HashMap占用空间过大;加载因子过小会使HashMap的性能降低;

   冲突,冲突会降低HashMap的性能,为了减少冲突,就要选择一个好的hashCode方法,调用commons包里的某个方法能满足要求;

影响HashMap遍历的性能的因素

初始容量,初始容量过大会降低遍历HashMap的性能;

使用HashMap时的注意点:

1,如果对遍历hashmap的性能要求高,就要注意初始容量和加载因子的设置,初始容量不要太高;

    2,要注意hashmap的性能,要避免rehash操作,所以要注意初始容量和加载因子的设置,当然最好能预判到hashmap存放的条目数的大概值,注意初始容量要大于最大条目数除以加载因子得到的值;

    3,key的选择应该是final的,最方便就是使用wrapper类,因为能保证hashcode不改变,以免出现错误;

后续加图,加引用;