写这个文章的目的主要是可以记录一下自己的学习,新方向的第一步吧。有不对的地方可以说出来,我再研究。


查看了一下JDK_API_1_6_zh_CN.CHM文档



在我的使用中,ArrayList 是我用的最多的,上面的文档中写的,

    1. ArrayList 是大小(长度)可以动态改变的数组,传统的数组中,只能一开始就给定好一个长度,不能修改

    2.关于算法的时间复杂度,我也不太会解释,emmmmm

    3.在要添加大量元素的时候,最好不要傻乎乎的去一个个的add,可以用ensureCapacity设置缓冲区大小,也就是长度

 4.对于迭代器,就不乱说了,不能误人子弟啊。


让我们来看一下源代码:


这个是遇到的第一个函数,也是一个带有参数的构造函数

上面有他的解释:

    创建一个带有初始大小的空列表

    参数的意思是初始的大小

    如果参数是负数就会抛出异常

函数内部:

    判断就不说了

    都是把一个object数组赋给了this.elementData  看一下这个属性


是一个非私有的属性。用的是transient修饰符,意思是不参与序列化过程,有一个专门说这个的文章:

关于Transient关键字的使用

上面的注释的意思大概是:

数组缓冲区中存储ArrayList元素的数组缓冲区,ArrayList的容量是这个数组缓冲区的长度,任何空的arraylist ,这个变量==空的object数组,当加了第一个元素的时候,将扩大到10

对着这个解释,大概可以看出来这个这个变量,是ArrayList可以动态改变大小的核心,transient修饰,让他可以改变。并且决定了ArrayList的容量。




第二个函数:无参数的构造函数,我自己用的蛮多的。注释的意思:创建一个长度为10的空列表

看了一个后面的那个常量,却是一个长度为0的数组。

测试了一下:


结果为0,可能是他的注释写错了?



第三个函数,也是最后一个构造函数了

构造一个包含指定元素的列表的列表集合,按照集合的迭代器的顺序返回

参数是要放入的集合,如果要放入的参数是null,抛出异常,但是好像没有抛出什么呀。@NotNull 是避免nullpointerException的,后面的是什么嘛,我看不懂。

后面的内容就是把参数赋值给变量了

后面的几个我感觉不怎么常用,就不写了。

写几个常用的吧


返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。区分了参数为null的情况



获取指定位置上的元素,0开始,rangecheck是判断参数是否大于了数组长度,大于的话抛出异常,没有的话,返回值


重新设置长度内的某一个位置的元素。index是位置0开始,element要设置的元素,

判断位置是否正确,取得被替换的值并返回,设置值



在最后插入一个元素



在指定位置插入元素


置空列表

大概就这么了,函数太多了,api中有大概的解释


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐