自己简单的实现了一下ArrayList的基本方法
很简单的那种,没有涉及任何高深的东西,只是为了简单的了解一下ArrayLisy的底层
package c11;
import java.util.ArrayList;
import java.util.List;
/**
* 实现了一下ArrayList的基本方法
* 看了一下源码,关于扩容我就暴力点,只要不够就增加一倍
* @author Administrator
*
*/
public class CopyArrayList {
//这个是模板
List list = new ArrayList<>();
private int size;
//ArrayList 的底层就是一个数组,所有的操作都围绕这个数组
private Object[] elementData;
/**
* 构造函数,有两种构造函数,一种有参,一种无参。初始化容器容量
*/
public CopyArrayList(){
elementData = new Object[10];
}
public CopyArrayList(int init){
elementData = new Object[init];
}
/**
* 扩容
*/
private void ensureCapacity(){
if(size>=elementData.length){
Object[] newArray = new Object[size*2+1];
//复制数组,将老数组的值全部copy进新数组
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
}
/**
* 是否越界
* @throws Exception
*/
private void check(int index){
if(index>=size){
try {
throw new Exception("越界");
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 获取size
*/
public int size(){
return size;
}
/**
* 判断非空
*/
public boolean isEmpty(){
return size == 0;
}
/**
* 添加元素,就是向数组添加元素,但是注意的是,由于刚开始我们默认了容量,所以添加的时候我们要注意,是否超出了
*/
public boolean add(Object o){
ensureCapacity();
elementData[size++] = o;
return true;
}
public boolean add(int index,Object obj){
check(index);
ensureCapacity();
System.arraycopy(elementData, index, elementData, index+1, size-index);
elementData[index] = obj;
size++;
return true;
}
/**
* 获取元素值,
*/
public Object get(int index){
check(index);
return elementData[index];
}
/**
* 删除指定位置的元素
*/
public void remove(int index){
check(index);
int num = size-index-1;
if(num>0){
System.arraycopy(elementData, index+1, elementData, index, num);
}
elementData[--size]=null;
}
/**
* 删除指定的元素
*/
public boolean remove(Object o){
for(int i = 0;i<size;i++){
if(elementData[i].equals(o)){
remove(i);
//return 有两种作用,返回值以及结束运行,在这里我们就可以知道,remove删除相同值的第一个
return true;
}
}
return false;
}
/**
*更改元素值
*/
public boolean set(int index,Object obj){
check(index);
elementData[index] = obj;
return true;
}
/**
* 测试
*/
public static void main(String[] args) {
CopyArrayList list = new CopyArrayList(3);
list.add("1111");
list.add("2222");
list.add("3333");
list.add("4444");
list.add("5555");
list.add(2, "33");
list.remove(2);
list.remove("4444");
System.out.println(list.size());
System.out.println(list.isEmpty());
}
}