1.4 get()方法的工作原理?
根据key的hashcodejinxinghash,得到buckets的值,如果存在碰撞,则利用equals方法在链表中产找
通过对key的hashCode()进行hashing,并计算下标( n-1 & hash),从而获得buckets的位置。如果产生碰撞,则利用key.equals()方法去链表中查找对应的节点。
1.5 HashMap中hash函数怎么是是实现的?还有哪些 hash 的实现方式?
1. 对key的hashCode做hash操作(高16bit不变,低16bit和高16bit做了一个异或);
2. h & (length-1); //通过位操作得到下标index。
还有数字分析法、平方取中法、分段叠加法、 除留余数法、 伪随机数法。
1.2 HashMap的原理,内部数据结构?
HashMap是基于hashing的原理,底层使用哈希表(数组 + 链表,后改为数组+红黑树,原因是因为链表太长,查询时间复杂度太高)实现。里边最重要的两个方法put、get,使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。
存储对象时,我们将K/V传给put方法时,它调用hashCode计算hash从而得到bucket位置,进一步存储,HashMap会根据当前bucket的占用情况自动调整容量(超过Load Facotr则resi