java面试篇(常见的集合底层原理)
集合



1、arraylist源码分析


三种构造方法:

扩容的逻辑:



2、ArrayList的底层实现原理是什么?

ArrayList list=new ArrayList(10)中的list扩容几次
3、如何实现数组和List之间的转换


4、LinkedList和arraylist的区别




5、hashmap的实现原理
二叉树:

红黑树:



散列表:





实现原理:



6、hashmap的put方法的具体流程


7、讲一讲hashmap的扩容机制


(e.hash&oldCap)是否为0这句话的解释:
abcd的hash值是10,它与数组长度16的按位与运算结果是0,所以不用移动桶下标。而1234的hash值是26,它的按位与运算不为0,则需要当前桶下标加上旧数组长度等于26。


8、hashmap的寻址算法是什么?
(n-1)&hash在n时2的n次幂时,计算按位与运算,等价于hash % n。
右移16位的异或运算,由于低位都是零,所以异或运算不改变原先的值,只有当hash值太大才会改变(似乎,这是猜测,老师没讲)。


9、hashMap在1.7情况下的多线程死循环问题

注意两个线程扩容,用的都是创建的新数组。






