ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生成一个长度为10的Object类型数组。
如果增加的元素个数超过了10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新数组当中,并且后续增加的内容都会放到新数组中。当新数组无法容纳增加的元素时,重复该过程。
对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。
ArrayList(数组的列表):底层是采用数组实现的,使用Add方法往里面添加东西。取出来的时候是和放进去的顺序一致的,先放进去的先取出来,后放进去的后取出来,元素的下标也是从0开始,和数组类似,里面允许存放相同的元素。
Remove方法的原理:比如清除了下标为0的元素,那么后面的元素就往前挪,第二个元素的下标又变成了0。放进去的什么类型的,取出来的时候向下类型转换就转换成什么类型的。
集合里面只能放置对象,不能放置原生数据类型的数据,例如需要把原生数据类型转换成包装类。
ArrayList里面有一个方法toArray(),这个方法是将这个集合转换成一个数组。
Object{}类型的无法强制类型转换成Integer[]类型的,因为Object[]类型里面可以存放很多类型的数据,比如String 、Integer等,而String类型的没法转换成Integer类型的,所以会报错。
集合里面存放的还是对象的引用,
ArrayList重写了Object的toString()方法,以一个[开头,一个]结束,中间包含调用list里面包含的每一个对象(每一个元素)的toString()方法的结果……
其实ArrayList底层就是一个数组而已,没什么神秘的,定义数组的时候底层首先给他初始化一个长度为10的数组而已。
集合大总结需要把圣思源笔记Java SE Lession5.pdf里面关于集合的笔记也加进去。
ArrayList里面的remove方法的代价比较高,是把index参数索引后面的所有元素都向前移动一位,索引值都减一,涉及到大量元素的移动,因此ArrayList里面的删除操作代价相当高。
ArrayList里面有两个添加方法,其中public boolean add(E e)不太耗费资源,操作时需要的资源比较少,只是追加到底层数组的末尾。另一种是public void add(int index,E element),这种添加方法代价就比较高了,和上面的remove方法消耗的资源差不多,这种方法是将元素添加到底层数组的指定位置。 |
|