Java中动态数组中元素的插入与删除

一、代码分析

(一)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);
        }
    }
}

二、测试结果:

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

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华不在意

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值