HaspMap的特点:
HashMap<K,V>继承了AbstractMap<K,V>,实现了Map<K,V>, Cloneable, Serializable等接口
1、存储双值,以 key—value 的形式存储数据
2、可以通过key来寻找key—value的位置(元素的位置由key来决定),从而得到value的值
3、key可以为null,但是不能重复
4、比较适合查找工作,时间复杂度为O(1)
5、可以使用clone()方法
6、可以被序列化
源码分析:
1、HashMap如何通过 key 来计算 key-value 存储的位置
先通过key获取key.hashCode的值,并进行一系列的扰动处理,最后和 table.length(数组长度)-1进行按位与操作,得到对应的存储位置的下标。当 key 为 null 时,该下标默认为0,截取代码如下:
/**
* 利用hashcode获取key对应的下标,当key为null时返回0
* 引入h一方面是进行扰动处理,可以是得到的index更加的分散
* 另一面可以在hashcode为负数时去掉负号
* @param key
* @return
*/
public int hash(K key){
if(key == null){
return 0;
}
int h = key