美团面试:JDK 1.8 HashMap如何处理hash冲突问题?我完全不懂啊!
- 内容介绍
- 文章标签
- 相关推荐
本文共计2200个文字,预计阅读时间需要9分钟。
1+什么是hash冲突?我们知道HashMap底层是由数组+链表/红黑树构成的。当我们通过put(key, value)向HashMap中添加元素时,需要通过散列函数确定元素应放置在数组中的哪个位置。当不同元素产生相同散列值时,就会发生hash冲突。
1 什么是hash冲突我们知道HashMap底层是由数组+链表/红黑树构成的,当我们通过put(key, value)向hashmap中添加元素时,需要通过散列函数确定元素究竟应该放置在数组中的哪个位置,当不同的元素被放置在了数据的同一个位置时,后放入的元素会以链表的形式,插在前一个元素的尾部,这个时候我们称发生了hash冲突。
事实上,想让hash冲突完全不发生,是不太可能的,我们能做的只是尽可能的降低hash冲突发生的概率:下面介绍在HashMap中是如何应对hash冲突的?
当我们向hashmap中put元素(key, value)时,最终会执行putVal()方法,而在putVal()方法中,又执行了hash(key)这个操作,并将执行结果作为参数传递给了putVal方法。那么我们先来看hash(key)方法干了什么。
本文共计2200个文字,预计阅读时间需要9分钟。
1+什么是hash冲突?我们知道HashMap底层是由数组+链表/红黑树构成的。当我们通过put(key, value)向HashMap中添加元素时,需要通过散列函数确定元素应放置在数组中的哪个位置。当不同元素产生相同散列值时,就会发生hash冲突。
1 什么是hash冲突我们知道HashMap底层是由数组+链表/红黑树构成的,当我们通过put(key, value)向hashmap中添加元素时,需要通过散列函数确定元素究竟应该放置在数组中的哪个位置,当不同的元素被放置在了数据的同一个位置时,后放入的元素会以链表的形式,插在前一个元素的尾部,这个时候我们称发生了hash冲突。
事实上,想让hash冲突完全不发生,是不太可能的,我们能做的只是尽可能的降低hash冲突发生的概率:下面介绍在HashMap中是如何应对hash冲突的?
当我们向hashmap中put元素(key, value)时,最终会执行putVal()方法,而在putVal()方法中,又执行了hash(key)这个操作,并将执行结果作为参数传递给了putVal方法。那么我们先来看hash(key)方法干了什么。

