java 自定义arraylist_自定义ArrayList的实现

本文通过一个自定义的MyArrayList类展示了如何使用数组实现ArrayList的基本操作,包括增删查改、插入、删除指定范围元素、翻转数组、查找元素位置等。详细注释帮助理解ArrayList的工作原理。
摘要由CSDN通过智能技术生成

使用数组来实现自定义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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值