ArrayList

ArrayList就是动态数组,是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处。

 

常用方法:

(一)add()和get()方法

boolean add(E e):将指定的元素添加到此列表的尾部。
E get(int index):返回此列表中指定位置上的元素。
 
例:
由于列表中没有索引为3的元素,所以上述代码错误的,s4得到索引为3的元素这句代码应该去掉。
 
(二)size()方法与clear()方法
int size():返回此列表中的元素的个数。
void clear():移除此列表中的所有元素。
 
例:
清除arrayList中元素后,输出它的元素个数,输出结果为:0
 
也可以用isEmpty()方法来证明数列已经清空:
boolean isEmpty():如果此列表中没有元素,则返回 true
 
(三)remove方法
E remove(int index):移除此列表中指定位置上的元素。
移除第0个元素后,其余元素往前移一位。
 
boolean remove(Object o):移除此列表中首次出现的指定元素(如果存在)。
 
(四)indexOf()方法
int indexOf(Object o):返回此列表中首次出现的指定元素的索引,或如果此列表不包含元素,则返回 -1。
 
输出结果为:0
 
(五)toArray()方法
Object[] toArray():按适当顺序(从第一个到最后一个元素)返回包含此列表中所有元素的数组。
 
toArray()方法返回一个Object类型的数组,不能用强制类型转换把Object数组转换为Integer类型的数组
即: Integer[] in = (Integer) list.toArray   这样做事错的。需要从Object数组内把元素取出来再转换。
 
为什么这样做是错的呢? 原因是Objcet数组内存放的可能是数字,也可能是字母,一把抓的转换时不合理的。
 
--------------------------
--------------------------
A)集合当中存放的依然是对象的引用而不是对象本身。
 
B)集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才嗯那个加入到集合当中。
 
C)集合当中放置的都是Object类型,因此取出来也是Object类型,那么必须要使用强制类型转换将其转换成真正的类型(也就是放置进去的类型)。
 
ArrayList的底层实现:
一)ArrayList底层采用数组实现,当使用不带参数的构造方法生成ArrayList对象时,实际上会在底层生产一个长度为10的Object类型的数组。
 
二)如果增加的元素超过10个,那么ArrayList底层会新生成一个数组,长度为原数组的1.5倍+1,然后将原数组的内容复制到新的数组中,并且后续增加的内容都会放到这个新的数组中。当新数组无法r容纳增加的元素时,重复这个过程。
 
三)对于ArrayList元素的删除操作,需要将被删除元素的后续元素向前移动,代价比较高。
 
 
原文地址:https://www.cnblogs.com/vmax-tam/p/4070459.html