HashMap
底层结构
数组+链表+红黑树
初始容量为16
加载因子为0.75
扩容机制为每次2倍
扩容临界值为:16*0.75
HashMap的存储方式
- 更具对象地址或者对象内容(在类里面自己重写的hashcode和equals方法)来计算出对应的hashcode值(对象的整数表示形式)
//原理
(h=key.hashcode())^(h<<<16)
- 根据得到的hashcode的值来用hash算法平均分布到每个位桶上
//原理
h=(n-1)&hash
- 判断table的索引值,如果为空直接添加,并且将其记录为头节点
- 如果不为空先判断key是否与元素相同,如果相同,value覆盖,如果不同指向下一个节点继续比较,直到空为止,到空位置则直接添加
HashMap与Hashtable的区别
- 继承不同的体系但是都继承了Map接口
- HashMap不同步,不安全,但是效率高。Hashtable同步(通过同步锁来实现),安全按但是效率低
- null只要求不同,HashMap键值对可以为null,但是Hashtable不可以为null
- 扩容机制不同
1)HashMap 容量为16 ,加载因子为0.75 ,每次扩容两倍
2)Hashtable 容量为11, 加载因子为0.75 ,每次扩容两倍加1