大家好,欢迎来到IT知识分享网。
关于ArrayList
相信ArrayList是小伙伴们在Java开发中经常会使用的类之一。那么ArrayList究竟是一个什么类呢。大概来说它是List
接口的可调整大小的数组实现。 实现所有可选列表操作,并允许所有元素,包括null。除了实现List接口之外,他的类还提供了一些方法来操纵数组的内部大小来存储列表。 也就是说ArrayList内部是由数组实现,往ArrayList中放置元素也是默认按照先后顺序进行放置;它的大小是可调整的,不用像使用数组一样担心它不够存放数据(这里排除内存限制)。
总的来说ArrayList不论从使用还是理解上都是比较简单的,那么让我们来分析一下其中的一些关键方法吧。
关键成员变量
下面列出了ArrayList的关键成员变量,数量并不多,可以看到元素在ArrayList中是存储在数组中的。
插入方法
最简单的方法就是add一个元素,下面是这个方法的源码。这个方法比较简单,但我们看第一步是ensureCapacityInternal
,这个方法是检测新size是否超出目前可容纳的最大值,超出的话需要扩展容量,最后走到grow方法中,具体代码下面已经给出。需要注意的是modCount++这一句,这个变量表示此列表已被结构修改的次数,结构修改是改变列表大小的那些修改,或以其他方式扰乱它,使得正在进行的迭代可能产生不正确的结果。也就是说在迭代的时候进行结构修改将导致程序出错。
另外一个常用的插入就是在指定位置插入,例如在首位(index为0)的位置插入等等。下面是这部分的源码,比较好理解,关键部分已经加上注释。
其次还有addAll方法,分别为向列表最后插入和指定位置插入两个方法,这两个方法都是在add方法上延伸出来的,很好理解,不再赘述。
删除方法
删除元素也是我们经常使用的方法,首先看按照索引删除元素。下面的代码注释已经比较明白,需要注意的是rangeCheck这个方法只检测index是否大于等于size,不检测是否小于0。这是因为是否小于0在访问数组时进行检测。
下面是根据删除指定元素。指定的元素可以为null,在找到指定元素的位置(索引)后,通过fastRemove删除元素。
还有用的比较多的是批量删除,以其中一个方法为例,如下。可见这个函数交由方法removeAll处理。在removeAll中,并没有删除,而是遍历每一个元素,判断是否需要保留,不需要保留的会被需要保留的覆盖。可能这句话不好理解,可以看一下具体的代码。
查询方法
查询方法是必须了解的,因为我们存起来也是为了获取。这个方法非常的简单,只做简单的参数检验,然后返回对应下标的元素。
总结一下
基本上把ArrayList涉及的关键函数都做了详细说明。其余的一些都比较好理解了。
请关注我的个人博客:http://blog.jerkybible.com/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/47939.html