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情况下的多线程死循环问题
注意两个线程扩容,用的都是创建的新数组。