java实现ArrayList
认识ArrayList
ArrayList继承自AbstractList 并实现List接口。
- arrayList可以存放null
- arrayList本质上就是一个elementData数组
- arrayList区别于数组的地方在于能够自动扩展大小,其中关键的方法就是gorw()方法
- arrayList中removeAll(Collection c)和clear()的区别就是removeAll可以删除批量指定的元素,而clear是全是删除集合中的元素
- arrayList由于本质是数组,所以它在数据的查询方面会很快,而在插入删除这些方面,性能下降很多,有移动很多数据才能达到应有的效果
- ArrayList的用法和Vector的区别是:ArrayList是线程不安全的,当多条线程访问同一个ArrayList集合时,程序需要手动保证该集合的同步性,而Vector则是线程安全的。
代码实现:
public class ArrayListTest<T> {
private Object[] elementData;
private int size;
public ArrayListTest(int cap){
if (cap<0)
throw new IllegalArgumentException();
this.elementData=new Object[cap];
}
/**
* 添加元素
*/
public boolean add(T value) {
if (size==elementData.length){
elementData = Arrays.copyOf(elementData,elementData.length*2);
}
elementData[size++]=value;
return true;
}
/**
* 获取元素
*/
public T get(int index) {
if (!checkRange(index)) {
throw new IndexOutOfBoundsException("参数越界");
}
return (T) elementData[index];
}
private boolean checkRange(int index) {
if (index < 0 || index >= size) {
return false;
}
return true;
}
/**
* 获取元素个数
*/
public int size() {
if (elementData.length==0){
return 0;
}
return size;
}
/**
* 删除元素
*/
public T remove(int index) {
if (!checkRange(index)){
throw new IndexOutOfBoundsException("");
}
T oldvalue= (T) elementData[index];
System.arraycopy(elementData,index+1,elementData,index,size-index-1);
elementData[size-1]=null;
--size;
return oldvalue;
}