HashMap的底层实现
HashMap是Map的一个接口实现,主要用来存放键值对,键只有一个是null,值可以有多个null。
在JDK1.8前是使用数组+链表进行存储,链表存储区间离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度很大,达O(n);在JDK1.8后修改进行了修改,在数组+链表进行存储的基础上加上了红黑树,当链表长度大于等于8的时候链表会变成红黑树。
HashMap的默认长度是16(1<<4);当这个长度使用达到(负载因子)0.75是会进行扩容,就把数组的大小扩展为原来的两倍;扩容后会重新分配,遍历hash表中所有的元素重新分到扩容后的HashMap中。
在hashMap中添加一个数据,首先判断hash值然后取模,然后在数组上判断这个模的位置是否存为null,如果为null就存放,否则存放头(JDK1.7)或者尾(JDK1.8)。