内部结构图
实现原理
HashMap内部维护着一个Entry类型的数组,默认大小16:Entry<K,V>[] table
,这个Entry对象包含key,value,next,hash四个属性,key和value即是你map.put(Key,Value)的key和value,hash是使用key经过算法得出的一个hash值,当我们通过get方法取值的时候即是比较的key的hash值。而next保存的是下一个Entey对象的引用,当调用put方法的时候,hashmap会根据key和数组大小决定这个key在数组中的位置,那么就有可能存在key不同但是算出来的位置相同的情况,这个时候就会把当前位置的值设置为新值的next元素,并把新值存放在当前元素值得位置。
特点
由于这种数据结构,hashmap是无序的。也正是由于这种结构,有可能会存在数组很大,但是实际元素量很少的情况,这种情况下取值是比较慢的。