星期天随想
今天打开csdn,看到博客头条推送了一条敖丙的文章,标题很吸引人,叫《大厂都是怎么进行SQL调优的?》。
看了一下,点击量很高,标题很唬人(吊打XX面试官系列,大厂XX系列),内容很时尚(年轻人不讲武德,耗子尾汁),后面还有加关注送资料(里面浓浓的原汁广告味)。
就想,希望自己的博客,都是一字一句自己敲下来的,内容都是自己验证过的,不管质量高低,尽量真实有用。
不改初心,勉力前行
从面试中来
记得好几年前了,当时刚工作没多久,想跳槽去一家公司某卡。
当时面试官那个哥们,具体长相记不清楚了,不过一看应该就技术挺厉害(发量较少,体型有点过劳肥)。
一来问了个java界的"太祖长拳"问题:
ArrayList与LinkedList有什么区别?
说实话,当时应该是刷了什么宝典之类的,回答应付过去了,大致如下
- 都实现了List接口
- ArrayList底层是数组,插入删除元素涉及数组元素的移动较慢,但是查找较快;
- LinkedList底层是双向链表,插入删除元素只改动头尾节较快,但是查找较慢(全链表循环一个个比较元素,跟查找的元素比较是否相等)
到面试中去
其实上面的答案是一般性回答,也没有看过源码,也没考虑线程安全方面(这个以后会单独讲)。
由于最近也在恶补《数据结构与算法》,所以就探究一下ArrayList与LinkedList的源码
类图
ArrayList与LinkedList都实现了List接口,所以看下他们的类图关系