一、代码分析
(一)MyArrayList类
1、该类实现(implements )Iterable接口,需重写它的抽象方法。
2、在该类中创建了Object类的对象数组,用于存放对象元素。
3、成员变量:total(int)记录实际的元素的个数
4、成员方法:
(1)在数组中添加元素:public void add(Object element)
(2)在某个对应的下标数组的位置添加元素:public void add(int index, Object element)
(3)删除下标为index的元素:public void remove(int index)
(4)重写接口的抽象方法:public Iterator iterator()
(5)是否复制产生新数组(可用于条件判断):private void grow()
5、创建了一个内部类,是Iterator接口的实现类,内部重写的抽象方法包括:
(1)判断是否存在下一个元素:public boolean hasNext()
(2)返回元素数据:public Object next()
import java.util.Arrays;
import java.util.Iterator;
/*
2022.7.30
MyArrayList:动态数组的数据结构
*/
public class MyArrayList implements Iterable {
//创建Object类的对象
private Object[] all = new Object[5];
//记录实际的元素的个数
private int total;
//在数组中添加元素
public void add(Object element) {
grow();
//将内容放入数组的最后位置
all[total++] = element;
}
private void grow() {
//添加数组,先判断数组是否已满
if (total >= all.length) {
//将原来的数组复制到一个新的数组,新数组的长度为原来的1.5倍
all = Arrays.copyOf(all, all.length + (all.length >> 1));
}
}
//在某个对应的下标数组的位置添加元素
public void add(int index, Object element) {
//判断传入的下标是否合理
if (index < 0 || index > total) {
throw new IndexOutOfBoundsException(index + "越界,合理范围是:[0," + (total - 1) + "]");
}
//调用判断条件:是否需要设置一个新的数组
grow();
System.arraycopy(all, index, all, index + 1, total - index);
//将元素加入数组
all[index] = element;
//插入元素后,数组的实际个数增加
total++;
}
//删除下标为index的元素
public void remove(int index) {
//判断传入的下标是否合理
if (index < 0 || index > total) {
throw new IndexOutOfBoundsException(index + "越界,合理范围是:[0," + (total - 1) + "]");
}
//将元素前移一位覆盖掉原来下标为index的元素
System.arraycopy(all, index + 1, all, index, total - index - 1);
//将后面空出的元素占用的位置设置为空
all[--total] = null;
}
//重写接口的抽象方法
@Override
public Iterator iterator() {
return new Itr();
}
//创建一个匿名内部类
private class Itr implements Iterator {
//设定一个下标,用于指向某个元素(默认指向的是第一个元素)
int cursor = 0;
@Override
//判断是否存在下一个数组
public boolean hasNext() {
return cursor < total;
}
@Override
public Object next() {
return all[cursor++];
}
}
}
(二)TestMyArrayList类
1、是测试类,主程序的入口。
2、创建MyArrayList类的对象,调用添加、删除方法,通过foreach循环进行输出。
//2022.7.30
public class TestMyArrayList {
public static void main(String[] args) {
//创建MyArrayList类的对象
MyArrayList my = new MyArrayList();
my.add("hello");
my.add("hi");
my.add(1,"enen");
my.add("java");
my.add("is");
my.add("nice");
my.add("mysql");
my.add("en");
my.remove(2);
//遍历打印输出
for (Object o : my) {
System.out.println( o);
}
}
}
二、测试结果:
结果表明:测试插入、删除方法与实验相符,代码可行。