上海制作网站,工信部网站备案注销,淘宝网页版官网入口,有个做特价的购物网站74.HashMap Map接口常用实现类#xff1a;HashMap、Hashtable和Properties HashMap是Map接口使用频率最高的实现类 HashMap是以key-value对的方式来存储数据 key不能重复#xff0c;但是值可以重复#xff0c;允许使用null健和null值 如果添加相同的key#xff0c;会覆…74.HashMap Map接口常用实现类HashMap、Hashtable和Properties HashMap是Map接口使用频率最高的实现类 HashMap是以key-value对的方式来存储数据 key不能重复但是值可以重复允许使用null健和null值 如果添加相同的key会覆盖原来的key 与HashSet一样不保证映射的顺序因为底层是以hash表的方式来存储的 HashMap没有实现同步因此线程是不安全的方法没有做同步互斥的操作没有synchronized
HashMap底层扩容机制 HashMap底层维护了Nod类型的数组table默认为null 当创建对象时将加载因子loadfactor初始化为0.75 当添加key-val时通过key的哈希值得到在table的索引。然后判断该索引处是否有元素如果没有元素直接添加。如果该索引处有元素继续判断该元素的key是否和准入加入的key相等如果相等直接替换val如果不相等需要判断是树结构还是链表结构做出相应处理。如果添加时发现容量不够需要扩容 第1次添加则需要扩容table容量为16临界值为12 以后再扩容则需要扩容table为原来的2倍临界值为原来的2倍既24以此类推
模拟HashMap触发扩容树化情况
public class HelloJava {public static void main(String[] args) {HashMap hashMap new HashMap();for (int i 1;i 12;i){hashMap.put(new A(i),hello);}hashMap.put(aaa,bbb);System.out.println(hashMap hashMap);}
}
class A{private int num;
public A(int num) {this.num num;}//所有的A对象的HashCode都是100Overridepublic int hashCode() {return 100;}
Overridepublic String toString() {return A{ num num };}
}