最后
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
- ArrayList基本了解:
-
ArrayList可以加入null,并且多个;
-
ArrayList是由数组来实现的;
-
ArrayList基本等同于Vector,除了ArrayList是线程不安全(执行效率高),在多线程情况下,不建议使用ArrrayList;
-
Java -version
1.8.0_221
- ArrayList中维护了一个Object类型的elementData数组。
transient Object[] elementData; // transient 标识瞬间,短暂的,表示该属性不会被序列化
-
当创建ArrayList对象时,如果使用的是无参构造器,则初始的elementData容量是0。第一次添加,则扩容elementData为10,如果需要再次扩容,则扩容elementData为原容量的1.5倍。
-
如果使用指定大小的构造器,则初始elementData容量为指定大小。如果需要扩容,则扩容elementData为1.5倍。
分析使用无参构造器,创建和使用ArrayList。有参构造器阅读源码过程差不多,不一样的是
初次扩容
!
源程序
@SuppressWarnings(value = “all”)
public class ArrayListSource {
public static void main(String[] args) {
// 使用无参构造器创建ArrayList
ArrayList list = new ArrayList();
// 使用有参构造器创建ArrayList
// ArrayList list = new ArrayList(8);
// 向集合添加10条数据
for (int i = 1; i <= 10; i++) {
list.add(i);
}
// 再向集合添加5条数据
for (int i = 11; i <= 15; i++) {
list.add(i);
}
list.add(100);
list.add(200);
}
}
分析过程
1.创建一个空的数组【elementData】
2.执行list.add(E e)
-
先确保内部容量,是否要扩容
ensureCapacityInternal
-
然后再执行赋值
第一次添加的时候
Debug F7 into
进入源码!如果装填的数据是基本类型,塞入前会有一步装箱操作。
3.确定最小容量【minCapacity】,第一次扩容为10
4.确定是否需要扩容
-
modCount++ 记录集合被修改的次数
-
如果elementData的大小不够,就调用grow()去扩容
面试结束复盘查漏补缺
每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。
以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~
重要的事说三遍,关注+关注+关注!
更多笔记分享
0-1715811659975)]