使用数组来实现自定义ArrayList,除了基本的增删查改等方法之外,还添加了API中所使用到的一些方法,方便大家更好的理解ArrayList的实现,具体实现都有解释,主函数中给出了测试方法,代码如下:
/**
* 自定义泛型列表
* @author 陈强
* @param
*/
public class MyArrayList {
Object[] data=new Object[0];//初始数组,定义一个对象类型的数组保存数据
public static void main(String args[]){
//创建Integer类型的数组列表
MyArrayList my=new MyArrayList();
//添加元素
for(int i=1;i<=5;i++){
my.add(i);
}
//my.removeFromTo(1, 3);
my.add(1);
//my.turnArray();
//System.out.println("首次出现指定元素的位置是"+my.IndexOf(1));
System.out.println("最后一次出现指定元素的位置是"+my.LastIndexOf(1));
System.out.println("队列当前的长度是"+my.size());
my.print();
//System.out.println("获取的元素"+my.get(1));
}
/**
* 打印队列元素的方法
*/
public void print(){
int length=data.length;
for(int i=0;i
System.out.print(data[i]+" ");
}
}
/**
*添加元素的方法
* @param e
*/
public void add(E e){
int length=data.length;//获取当前数组的长度
Object[] dest=new Object[length+1];//创建一个新数组
//先将原数组中的元素都复制过来
for(int i=0;i
dest[i]=data[i];
}
dest[length]=e;//添加新元素
data=dest;//用新数组替换原来的数组
}
/**
* 插入元素的方法
* @param index 指定的下标
* @param e 插入的元素
*/
public void insert(int index,E e){
int length=data.length;
Object[] dest=new Object[length+1];
for(int i=0;i
dest[i]=data[i];
}
dest[index]=e;//添加新元素到索引位置
for(int j=index;j
dest[j+1]=data[j];
}
data=dest;
}
/**
* 删除元素的方法
* @param index 指定的下标
*/
@SuppressWarnings("unchecked")
public E remove(int index){
int length=data.length;
Object[] dest=new Object[length-1];
for(int i=0;i
dest[i]=data[i];
}
for(int j=index+1;j
dest[j-1]=data[j];
}
data=dest;
return (E)data[index];//得到被移除的元素
}
/**
* 移除所有元素的方法
*/
public void removeAll(){
Object dest[]=new Object[0];
data=dest;
}
/**
* 获取队列的长度
*/
public int size(){
return data.length;
}
/**
* 获取指定下标的元素
*/
@SuppressWarnings("unchecked")
public E get(int index){
return (E) data[index];
}
/**
* 判断队列是否为空
*/
public boolean isEmpty(){
return size()==0;
}
/**
* 改变指定下标位置的元素的方法
* @param index
* @param e
*/
public void set(int index,E e){
//方法类似插入的方法
int length=data.length;
Object[] dest=new Object[length];
for(int i=0;i
dest[i]=data[i];
}
dest[index]=e;//改变指定位置的元素
for(int j=index+1;j
dest[j]=data[j];
}
data=dest;
}
/**
* 删除从某一个下标位置开始到某一个下标位置结束的中间元素
* @param start 开始位置的下标
* @param end结束位置的下标
*/
public void removeFromTo(int start,int end){
int length=data.length;
Object dest[]=new Object[length-(end-start)-1];
for(int i=0;i
dest[i]=data[i];
}
for(int j=end+1;j
dest[j-(end-start)-1]=data[j];
}
data=dest;
}
/**
* 将列表翻转
*/
public void turnArray(){
int length=data.length;
int j=length-1;
Object temp;
for(int i=0;i
temp=data[j];
data[j]=data[i];
data[i]=temp;
j--;
}
}
/**
* 搜索列表中首次出现指定元素的位置,如果不存在该元素则返回-1
* @param obj
*/
public int IndexOf(Object obj){
int length=data.length;
for(int i=0;i
if(data[i]==obj){
return i;
}
}
return -1;
}
/**
* 搜索列表中最后一个出现指定元素的位置,如果不存在则返回-1
* @param obj 指定元素
*/
public int LastIndexOf(Object obj){
int length=data.length;
for(int i=length-1;i>=0;i--){
if(data[i]==obj){
return i;
}
}
return -1;
}
}