目录
一、为什么数组索引是从0开始?如果从1开始不行吗?
二、ArrayList底层的实现原理是什么?
编辑三、ArrayList list = new ArrayList(10)中的list扩容几次?
四、如何实现数组与List之间的转换?
五、ArrayList和LinkedList的区别?
六、HashMap实现原理?
七、HashMap的JDK1.7和JDK1.8有什么区别?
八、HashMap的put方法的具体流程?
九、HashMap的扩容机制?
十、HashMap的寻址算法?
十一、HashMap在1.7情况下的多线程死循环问题
一、为什么数组索引是从0开始?如果从1开始不行吗?
寻址公式:a[i] = baseAddress + i * dataTypeSize
baseAddress :数组的首地址
dataTypeSize:代表数组中元素类型的大小
当索引从一开始的话:
寻址公式: a[i] = baseAddress + (i - 1) * dataTypeSize
对于CPU来说,增加了一个减法指令
总结来说:
- 在根据数组索引获取元素的时候,会用索引和寻址公式来计算内存所对应的元素数据,寻址公式是:数组的首地址+索引乘以存储数据的类型大小
- 如果数组的索引从1开始,寻址公式中,就需要增加一次减法操作,对于CPU来说就多了一次指令,性能不高
二、ArrayList底层的实现原理是什么?
三、ArrayList list = new ArrayList(10)中的list扩容几次?
源码分析:
参考回答:
该语句只是声明和实例了一个ArrayList,指定了容量为10,未扩容
四、如何实现数组与List之间的转换?
代码案例:
代码案例: