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++];
- }
- }
- }
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);
- }
- }
- }

结果表明:测试插入、删除方法与实验相符,代码可行。