如何优化模拟HashMap中的冲突处理机制?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1077个文字,预计阅读时间需要5分钟。
最近查看HashMap源码,发现其中相同下标的内容容易产生hash冲突,但实际调试时需要产生hash冲突。hash冲突原理:HashMap中,冲突是key的hash值相同导致的。解决方法:key首先调用hash()方法,然后根据返回的hash值计算在数组中的位置。代码示例:static final int hash(Object key) { int h=key.hashCode(); return h ^ (h >>> 16); }
hash冲突原理最近看HashMap的源码,其中相同下标容易产生hash冲突,但是调试需要发生hash冲突,本文模拟hash冲突。
HashMap冲突是key首先调用hash()方法:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
然后使用hash值和tab数组长度做与操作:
(n - 1) & hash
算出来的下标,如果一致就会产生冲突。
通过ASKII码获取单个字符开始想到单字符,比如a、b、c、d、e这类字符,但是如果一个一个试的话特别繁琐,想到了ASKII码:
遍历1~100的ASKII码。
本文共计1077个文字,预计阅读时间需要5分钟。
最近查看HashMap源码,发现其中相同下标的内容容易产生hash冲突,但实际调试时需要产生hash冲突。hash冲突原理:HashMap中,冲突是key的hash值相同导致的。解决方法:key首先调用hash()方法,然后根据返回的hash值计算在数组中的位置。代码示例:static final int hash(Object key) { int h=key.hashCode(); return h ^ (h >>> 16); }
hash冲突原理最近看HashMap的源码,其中相同下标容易产生hash冲突,但是调试需要发生hash冲突,本文模拟hash冲突。
HashMap冲突是key首先调用hash()方法:
static final int hash(Object key) {
int h;
return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
}
然后使用hash值和tab数组长度做与操作:
(n - 1) & hash
算出来的下标,如果一致就会产生冲突。
通过ASKII码获取单个字符开始想到单字符,比如a、b、c、d、e这类字符,但是如果一个一个试的话特别繁琐,想到了ASKII码:
遍历1~100的ASKII码。

