1.判断一个集合类是否为线程安全的机制是什么?
怎么判断一个Java类是否是线程安全?有那些角度?_不积跬步,无以致千里的博客-CSDN博客_java怎么判断线程是否安全
2.说一下 Fail-Fast 机制,结合源码说一下(如果可以的话)
相关阅读:
ArrayList源码分析(扩容机制jdk8) - 掘金 (juejin.cn)
1.ArrayList 初始化时数组的默认长度是多少?
默认长度为10。但是ArrayList的默认长度是有jdk版本差异的,在jdk8版本之前默认长度是10。而在jdk8版本的时候对ArrayList数组的默认长度进行了优化,将原来的默认长度10,改为了初始长度为0。当我们在首次添加元素,需要分配数组空间时,jdk自动帮我们进行了扩容操作,将初始数组长度扩容成了10。这样做有效地降低了无用内存的占用!它利用了数组扩容的特性来完成集合的这些功能,这也就是ArrayList集合查询快、增删慢的原因了!
2.ArrayList 扩容是扩容多少倍?扩容后是用原来的数组还是新的数组?
新的容量是旧容量加上旧容量值右移一位得到的,一个数右移n(n>0)位的结果等于这个数除以2^n的整数部分;新数组。
3.ArrayList 是一个线程安全的集合类吗?
不是。

4.ArrayList 和 LinkedList 的使用场景
(1)如果应用程序对数据有较多的随机访问,ArrayList对象要优于LinkedList对象;
( 2 ) 如果应用程序有更多的插入或者删除操作,较少的随机访问,LinkedList对象要优于ArrayList对象;
(3)不过ArrayList的插入,删除操作也不一定比LinkedList慢,如果在List靠近末尾的地方插入,那么ArrayList只需要移动较少的数据,而LinkedList则需要一直查找到列表尾部,反而耗费较多时间,这时ArrayList就比LinkedList要快。
相关阅读:
Java如何实现LinkedList按索引下标进行插入 - 枫叶像思念 - 博客园 (cnblogs.com)