一、目的:研究ArrayList的实现
1.特点:
重复性:数据可以重复
null值:可以有null值存在
有序性:保证数据插入有序;
访问效率高、移动 删除效率低
2. 研究源码问题:
底层数据结构:数组
构造函数:
基本属性:Objtct数组
默认值: 数组初始值为10
扩容方式: 1.5倍扩容,相关方法:ensureCapacity();
增删改查方法:
remove();方法中利用System.arraycopy();实现
问题1:System.arraycopy()的拷贝效率以及和array.copyof()的异同?
System.arraycopy():本地方法,无新对象产生,效率高;
array.copyof():方法产生新的对象, 返回一个数组对象,底层调用前者;
3.部分重点方法介绍:
boolean contains(Object o); 集合是否包含此对象;
Iterator iterator(); 返回的是一个迭代器对象,用于遍历集合
Object [] toArray(); 将集合转换为数组
int indexOf(Object o) 判断对象在集合中的位置(从前往后找)
int lastIndexOf(Object o) 判断对象在集合中的位置(从后往前找)
boolean containsAll(Collection<?> c); 判断当前容器是否包含此入参容器
boolean addAll(int index, Collection<? extends E> c); 将入参集合添加至当前集合的指定位置
boolean remove(Collection<?> c) 求差集(去除当前集合中入参集合包含的的数据,仅保留当前集合中入参集合没有的元素)
boolean retainAll(Collection<?> c); 求交集(删除所有元素,除过入参集合包含的元素
void clear() ; 将集合中所有对象删除(都置为null))
List subList(int fromIndex, int toIndex); 查找指定范围内当前集合的子集
T[] toArray(T[] a); 如果入参数组长度小于集合大小,将集合转化为数组返回,否则我,把集合的所有元素放到入参数组的起始位置,并将a[size]置位null;之后返回a。
4.ArrayList和数组有哪些区别?
1.数组可以使用基本类型的元素,而ArrayList不能使用基本类型,必须使用包装类;
2.ArrayList初始化可以不用声明大小,而数组必须指定大小;