目的是自己实现一个ArrayList,以便于更好的理解ArrayList的底层结构
1. 默认容器为10,如果大于10就扩容,扩容其实就是创建一个能容纳更多的一个数组,然后把原来的数组copy至新的数组
private Object[] elementData;
private int size;
public int size(){
return size;
}
public SxtArrayList(){ //默认为10
this(10);
}
public SxtArrayList(int a) {
if(a<0){
try {
throw new Exception();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
elementData = new Object[a];
}
2. 检查size是否为0,如果为0就返回true
//是否为空方法
public boolean isEmpty(){
return size == 0;
}
3. add(int index,Objext obj)指定位置添加对象。先把index这个位置以后的数组复制到index+1的位置,然后给index增加对象
public void add(Object obj){
if(size == elementData.length){
Object[] newArray = new Object[size*2+1];//创建一个新的数组
System.arraycopy(elementData, 0, newArray, 0, elementData.length);//把原来的复制给新的数组里面
elementData = newArray;
}
elementData[size]=obj;
size++;
}
public void add(int index,Object obj){
rangeCheck(index);
System.arraycopy(elementData, index, elementData, index + 1,
size - index);//复制index+1位置
elementData[index] = obj;
size++;
}
4. remove()方法。就是把index+1以后的对象复制到index这个位置上。
public void remove(int index){
//删除指定位置
rangeCheck(index);
int numMoved = size - index - 1;
if (numMoved > 0){
System.arraycopy(elementData, index+1, elementData, index,
numMoved);
}
elementData[--size] = null;
}
//重写remove
public boolean remove(Object obj){
if (obj == null) {
for (int index = 0; index < size; index++)
if (elementData[index] == null) {
remove(index);
return true;
}
} else {
for (int index = 0; index < size; index++)
if (obj.equals(elementData[index])) {
remove(index);
return true;
}
}
return false;
}
5. get()直接就返回index相应的对象。set()相当于替换这个位置上的对象
/***
* get()方法
* @param index
*/
public Object get(int index){
rangeCheck(index);
return elementData[index];
}
/***
* set()方法
* @param index
*/
public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;
return oldValue;
}
6. 封装检测index异常方法
private void rangeCheck(int index){
if(index<0||index>size){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
7. 测试一下