Java中HashMap是使用拉链法来解决冲突的,请教是为什么
Java中HashMap是使用拉链法来解决冲突的,请问是为什么?
当向HashMap存入相同Key,不同Value的时候,旧值被覆盖。那何必用拉链法把相同Key的Value存入链表呢?百思不得骑姐啊- -!请问是为什么呢
------解决方案--------------------
key1 key2 key3的hashCode相同,又不能保证key1 key2 key3相同,更不能保证value1 value2 value3相同,当然不能覆盖了
------解决方案--------------------
一句话概括:存在一种情况即两个不同对象的hashcode相同,即所谓的hash冲突,链表就是用来解决hash冲突的。
附上hashmap的源码
当向HashMap存入相同Key,不同Value的时候,旧值被覆盖。那何必用拉链法把相同Key的Value存入链表呢?百思不得骑姐啊- -!请问是为什么呢
------解决方案--------------------
key1 key2 key3的hashCode相同,又不能保证key1 key2 key3相同,更不能保证value1 value2 value3相同,当然不能覆盖了
------解决方案--------------------
一句话概括:存在一种情况即两个不同对象的hashcode相同,即所谓的hash冲突,链表就是用来解决hash冲突的。
附上hashmap的源码
final Entry<K,V> getEntry(Object key) {
int hash = (key == null) ? 0 : hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash &&
((k = e.key) == key
------解决方案--------------------
(key != null && key.equals(k))))
return e;
}
return null;
}