在实现快速查询上,哈希表是经常使用的一种数据结构,是根据关键码值(Key value)而直接进行访问的数据结构。而Java实现HashMap的原理具体是怎样的,需要以下方面来理解:
1.Java中分散与指针结构
2.HashMap的构造函数以及各个版本底层构造
3.hashCode的计算以及数组下标的计算
4.哈希冲突的发生和解决方案
一、Java中分散与指针结构
Java编程语言实现HashMap时,是采用分散和指针的数据结构实现一个“链表散列”的数据结构,即是和链表的结合体。
二、HashMap的构造函数以及各个版本底层构造
1.HashMap构造函数为:
//构造函数1
public HashMap(int initialCapacity, float loadFactor) {
//指定的初始容量非负
if (initialCapacity < 0)
throw new IllegalArgumentException(Illegal initial capacity: +
initialCapacity);
//如果指定的初始容量大于最大容量,置为最大容量
if (initialCapacity > MAXIMUM_CAPACITY)
initialCapacity = MAXIMUM_CAPACITY;
//填充比为正
if (loadFactor <= 0 || Float.isNaN(loadFactor))
throw new IllegalArgumentException(Illegal load factor: +
loadFactor);
this.loadFactor = loadFactor;
this.threshold = tableSizeFor(initialCapacity);//新的扩容临界值
}
//构造函数2
public HashMap(int initialCapacity) {
this(initialCapacity, DEFAULT_LOAD_FACTOR);
}
//构造函数3
public HashMap() {
this.loadFactor = DEFAULT_LOAD_FACTOR; //