使用数组来实现自定义ArrayList,除了基本的增删查改等方法之外,还添加了API中所使用到的一些方法,方便大家更好的理解ArrayList的实现,具体实现都有解释,主函数中给出了测试方法,代码如下:
Java代码
/** * 自定义泛型列表 * @author 陈强 * @param <E> */ public class MyArrayList<E> { Object[] data=new Object[0];//初始数组,定义一个对象类型的数组保存数据 public static void main(String args[]){ //创建Integer类型的数组列表 MyArrayList<Integer> my=new MyArrayList<Integer>(); //添加元素 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<length;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<length;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<index;i++){//将索引前的元素先复制过来 dest[i]=data[i]; } dest[index]=e;//添加新元素到索引位置 for(int j=index;j<length;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<index;i++){//将索引前的元素复制过来 dest[i]=data[i]; } for(int j=index+1;j<length;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<index;i++){ dest[i]=data[i]; } dest[index]=e;//改变指定位置的元素 for(int j=index+1;j<length;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<start;i++){ dest[i]=data[i]; } for(int j=end+1;j<length;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<length/2;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<length;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; } }
查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/sjjg/
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索数组
, arraylist
, object
, 方法
, 代码
, 类型
自定义类型数组
arraylist自定义排序、java 自定义arraylist、自定义arraylist、arraylist 自定义类、arraylist实现原理,以便于您获取更多的相关知识。
时间: 2024-12-02 17:18:09