ArrayList源码

方法:1.先大致了解成员变量2.了解构造器3.了解核心方法

成员变量:分别为:1.定义了一个空数组,2.第二个属于使用transient关键字修饰(这个属于才是实际存储数据的数组,此处关键字是流的时候需要掌握的)3.定义一个默认容量 alt

有参构造:可以传入一个初始化的容量,这个构造器内部会根据容量进行判断。容量的分界是从0开始的。好处是,需要使用空数组时不用到处new。 alt

无参构造:默认为空数组,只有向属于里面添加时才会初始化一个长度为10的数组。 alt

构造器2:有参构造器中传入了一个集合,此处的集合使用了泛型。在构造器内部首先调用了toArray方法把传入的集合变成了一个数组。并且赋值给elementdata,然后会判断这个element的size是否等于0,如果为0,则elementdata就是空数组。否则就判断element的类型是否object数组类型。如果不是数组类型,然后进行数组的拷贝,拷贝时使用Arrays.copyOf方法,这个方法返回一个数组类型的并且这个方法有三个参数,分别为源数组,拷贝数组的长度,以及将数组拷贝为哪种类型(反射)。 alt

add方法:首先使用确保内部容量方法,去确保size加1容量,确保成功才会接着执行,否则抛出异常。 (此处的add方法的实现,jdk1.8与jdk11源码不相同);