1、HashMap基本实现
HashMap 的基本数据结构是Entry<K,V>[] table。
HashMap在JDK1.8后把基于数组+红黑树,提高查找效率。
2、HashMap原理
利用key的hashCode重新hash计算出当前对象的元素在数组中的下标。
存储时,如果出现hash值相同的key,此时有两种情况。(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突),则将当前的key-value放入链表中。
获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。
HashMap是如何解决hash冲突的问题,核心就是使用了数组的存储方式,然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比。
3、HashMap性能
HashMap有两个参数影响其性能:容量和加载因子。
当哈希表中的条目超过二者乘积时,哈希表进行rehash操作,哈希表桶数加倍。加载因子衡量散列表的空间使用程度,越大表示散列表的装填程度越高。加载因子越大,对空间利用越充分,但查找效率越低;加载因子越小,则散列表数据过于稀疏,空间浪费。
4、与HashTable的区别
两者最主要的区别在于Hashtable是线程安全,而HashMap则非线程安全。Hashtable的实现方法里面都添加了synchronized关键字来确保线程同步,因此相对而言HashMap性能会高一些。