HashMap的Entry链问题

HashMap的Entry链不太清楚具体作用,HashMapkey是不能重复的吧,那他的key重复value不重复就形成了一个Entry链,value覆盖。那他之前存储的entry是有什么作用。。。不是性能浪费了吗

Entry链是为了解决Hash冲突而存在的,不同的key可能hash值一样,这个时候就会散列在同一个position上面,解决Hash冲突的办法有很多种,
Java使用的就是拉链法,即hash值一样的就形成一条链,HashMap的key是不能重复的,因为需要进行查找,如果key不唯一,就不用说查找了,
HashMap的jdk1.8版本以上用了新的办法,当拉链个数大于8个时候采用红黑树,这样可以提高查找效率,重新hash之后,如果链数小于6,又会
重新转为链表结构。因此出现Hash冲突,性能是必然要打折扣的

(那他的key重复value不重复就形成了一个Entry链,value覆盖) 你说的不对,hashmap的key如果重复了,你在put的时候会进行替换,把旧的值
替换掉成新的然后返回旧的值。
产生链的原因是hash冲突,hashmap在解决hash冲突的时候采用的是拉链发,hashmap在进行put的时候,是先计算key的hash值,然后再把在根据
数组的长度取模,然后找到该位置上时候存在数据(hash冲突),不存在就直接插入,如果存在就继续沿着链表向下搜索,并使用hashcode和equal
方法进行比较,相同就直接进行替换,不同找到最后一个位置进行链表尾插(jdk1.8之前是头插,jdk1.8是尾插)