哈希运算过程
● 使用 Entry[] 存放数据
● 数组的默认初始容量是 16
● 容量翻倍增长
● 内部运算过程,由键来运算
● key.hashCode() 获得键的哈希值
● 用哈希值和数组长度来计算下标值 i
● 把键值对封装成 Entry 实例,放入 i 位置
■ 如果有空位置,直接放入
■ 如果该位置存在数据,依次用equals()比较key是否相等
◆ 如果找到相等的key,覆盖值
◆ 如果没有相等的,链表连接在一起
■ 负载率,加载因子 0.75
◆ 新建翻倍容量的新数组
◆ 所有数据重新执行哈希运算放入新数组
■ jdk1.8以后
◆ 如果链表长度到8,转成红黑树
◆ 如果数据减少到6,转回成链表
下面笔者是写的哈希运算过程的demo:
首先定义一个类,用它作为key值
public class KeyObject {
private int x;
private int y;
public KeyObject(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x