》兄弟,我在你之前的文章中看到ArrayList的内部是用数组实现的,我对数组很感兴趣,想深入了解一下,今天终于来到了这个链接。是的,我好期待!”三姐的语气似乎很激动。“确实,看看ArrayList的源码就清楚了。”正如我所说,我打开了IntellijIDEA并找到了ArrayList的源代码。/***ThearraybufferintowhichtheelementsoftheArrayListarestored.*ThecapacityoftheArrayLististhelengthofthisarraybuffer.Any*emptyArrayListwithelementData==DEFAULTCAPACITY_EMPTY_ELEMENTDATA*willbeexpandedtoDEFAULT_CAPACITYwhenthefirstelementisadded.*/transientObject[]elementData;//non-privatetosimplifynestedclassaccess/***ThesizeoftheArrayList(thenumberofelementsitcontains).**@serial*/privateintsize;“瞧见没?Object[]elementData是一个数组。”我指着显示屏上的那串代码继续说。数组是一个对象,包含固定数量的相同类型的元素。数组会将元素放在指定的位置根据索引,也就是说我们可以通过索引来访问这些元素,在Java中,索引是从0开始的。“哦,Java是基于C/C++语言实现的,而C语言的下标是从0开始的,所以Java继承了这个良好的传统习惯。C语言有一个很重要的概念叫指针,它其实是一个偏移量,从起始位置的偏移量,第一个元素在起始位置,它的偏移量是0,所以索引是0。”此刻,我是非常有信心。“另外,还有一个说法,早期的计算机资源比较匮乏,相比于1作为起始下标,0作为起始下标,编译效率更高。”“哦。”三姐意味深长的点头说道。我们可以将数组理解为排列整齐的单元格,每个单元格存储一个元素。数组元素的类型可以是基本数据类型(如int、double),也可以是引用数据类型(如String),包括自定义类型。声明数组有两种方法。先看第一种类型:int[]anArray;再看第二种类型:intanOtherArray[];区别在于方括号的位置,是跟在类型关键字后面还是跟在变量名后面。前者用得比较频繁,在ArrayList的源码中使用了第一种方法。同样,数组的初始化方法有很多种,最常见的一种是:int[]anArray=newint[10];你看见了吗?上面这行代码用到了new关键字,也就是说数组确实是一个对象,只有创建对象才会用到new关键字,基本数据类型是不会用到的。然后,我们需要在方括号中指定数组的长度。此时数组中的每个元素都会被初始化为默认值,int类型为0,Object类型为null。不同数据类型的默认值是不同的,可以参考之前的文章。另外,也可以使用大括号直接初始化数组中的元素:intanOtherArray[]=newint[]{1,2,3,4,5};此时数组的元素为1、2、3、4、5,索引依次为0、1、2、3、4,长度为5。“兄弟,你怎么访问数组?”三姐及时打断。前面说过,数组的元素可以通过索引来访问,如下:anArray[0]=10;变量名,加上方括号,加上元素的索引,就可以访问数组,通过“=”运算符可以给元素赋值。如果索引处的值超出数组范围,则抛出ArrayIndexOutOfBoundException。由于数组的索引从0开始,因此它在数组的长度-1处结束。不要使用超出这个范围的索引访问数组,不会抛出数组越界的异常。当数组中的元素较多时,很难逐一访问数组,因此需要遍历。第一个,使用for循环:intanOtherArray[]=newint[]{1,2,3,4,5};for(inti=0;i
