HashMap扩容机制问题

#HashMap扩容机制问题
我们常见的文章博客和看的大多数视频都说了HashMap扩容机制问题,但是我这里有几个小的疑问?
第一个:当我初始化HashMap并且放入了第一个元素后,那么HashMap就被初始化为16的大小。那么如果我后续放入的8个元素经过hash算法都放入下标为1的位置上(假设第一次put的元素在下标为0的位置上),这个时候我再插入4个元素(这4个元素随机分配)。那么这种情况下会触发扩容吗?
我看的文章都说数组使用量大于16*0.75即12个的时候就进行扩容,文章所说的扩容条件是只是单纯的数组使用超过12,还是数组加上链表的元素超过12呢?
第二个:以我所看的文章和视频教会给我的东西是:当数组长度没有达到扩容条件,但是某个下标的链表长度达到了8及以上,那么就会优先进行扩容,然后重新hash。真实情况是这样吗?

去看hashMap里面的puVal方法,最后几行的代码,扩容其实是根据size变量来的,但这个size变量并不是只在没有哈希冲突的时候才会增加。

可以看看这个或者去看看源码中插入值那部分
https://blog.csdn.net/wenwenaier/article/details/121501186

1.什么是容量?
2.假设hashMap数组长度16,那么当元素个数达到12个就扩容合理吗?还是使用了12个数组下标再扩容合理?
3.假设hashMap数组长度为1000,那么当一条链表长度超过8就要扩容这合理吗?

你有没有想过为什么要使用hashMap?为什么要扩容?因为HashMap是采用数组 + 链表+红黑树,即使元素个数超过规定的容量,不用扩容也可以继续往map里添加元素。在这种情况下为什么还要扩容呢?在jdk1.8之前hashmap的结构是:数组+链表;后来又使用了红黑树,这是为什么呢?红黑树好在哪里?为什么不直接使用:数组 + 红黑树?既然链表和红黑树共存,那什么时候使用链表?什么时候使用红黑树?