HashMap的心得
HashMap是通过Entry[]数组和链表来实现的。在进行put(K key,V value)操作时,会通过Key的hashCode计算得出这个Entry的索引值,如果Entry的索引值重复,那么就会使用到链表,把后存进的元素放在这个数组中,并把next属性指向在它之前存进来的具有相同hashCode值的那个元素。
为什么后进来的元素需要放在链表的最前面,而不是最后面,这就取决于效率问题,在集合中,我们除了做存(put)的操作之外,还需要做取(get())的操作;get(Object key)方法在实现的时候,因为HashMap底层综合运用了数组和链表,如果hashCode值重复,那么就需要去这个索引下的链表中去寻找值,这样就会出现两次查询,那么为了提高效率,把后进来的值放在链表的最前面,这样可以减少一次查询,提高效率。
除此之外,HashMap的数组其实也是一个链表,所以HashMap实际上是一个”链表散列”的数据结构,综合使用了数组和链表这两种数据结构。
附:网上找的HashMap图