简单的实现
import java.util.Arrays;
public class MyArray {
private Object[] elementData;
private int size;
private static final int DEFAULT_CAPACITY = 10;
/**
* 无参构造函数
*/
public MyArray(){
this.elementData = new Object[DEFAULT_CAPACITY];
}
/**
* 有参构造函数
* @param size
*/
public MyArray(int size){
if(size> 0)
this.elementData = new Object[size];
else
throw new IllegalArgumentException("Illegal Capacity: "+ size);
}
/**
* size
* @return 返回长度
*/
public int size(){
return size;
}
/**
*是否为空
* @return boolean
*/
public boolean isEmpty(){
return size == 0;
}
/**
*查询元素的下标
* @param o
* @return 返回该元素的下标 没有返回-1
*/
public int indexOf(Object o){
if(o == null){
for(int i = 0; i < size; i++)
if(elementData[i] == null)
return i;
}else{
for(int i = 0;i < size; i++)
if(o.equals(elementData[i]))
return i;
}
return -1;
}
/**
* 是否有该元素
* @param o
* @return boolean
*/
public boolean contains(Object o){
return indexOf(o) >= 0;
}
/**
* 判断是否合法
* @param index
*/
private void indexRange(int index){
if(index >= size)
throw new IndexOutOfBoundsException("Index: "+index+", Size: "+size);
}
/**
*获取该下标的元素
* @param index
* @return 返回该下标元素
*/
public Object get(int index){
indexRange(index);
return elementData[index];
}
/**
* 在index下标 安置元素
* @param index
* @param element
* @return 返回旧元素
*/
public Object set(int index,Object element){
indexRange(index);
Object oldValue = elementData[index];
elementData[index] = element;
return oldValue;
}
/**
* 添加元素
* @param element
* @return boolean
*/
public boolean add(Object element){
//最小容量
int minCapacity = size + 1;
//当前容量
int oldCapacity = elementData.length;
//判断是否扩容
if(minCapacity - oldCapacity > 0){
//新容量为原来的1.5倍
int newCapacity = oldCapacity + (oldCapacity >> 1);
elementData = Arrays.copyOf(elementData,newCapacity);
}
elementData[size++] = element;
return true;
}
/**
* 删除元素
* @param index
* @return 返回oldValue(删除该下标的元素)
*/
public Object remove(int index) {
indexRange(index);
Object oldValue = elementData[index];
//index下标后面的元素个数
int numBehind = (size - 1) - index;
//判断后面还有没有元素
if(numBehind > 0)
System.arraycopy(elementData, index + 1, elementData, index, numBehind);
//回收
elementData[--size] = null;
return oldValue;
}