• 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()


    1. import java.util.Arrays;
    2. import java.util.Iterator;
    3. /*
    4. 2022.7.30
    5. MyArrayList:动态数组的数据结构
    6. */
    7. public class MyArrayList implements Iterable {
    8. //创建Object类的对象
    9. private Object[] all = new Object[5];
    10. //记录实际的元素的个数
    11. private int total;
    12. //在数组中添加元素
    13. public void add(Object element) {
    14. grow();
    15. //将内容放入数组的最后位置
    16. all[total++] = element;
    17. }
    18. private void grow() {
    19. //添加数组,先判断数组是否已满
    20. if (total >= all.length) {
    21. //将原来的数组复制到一个新的数组,新数组的长度为原来的1.5倍
    22. all = Arrays.copyOf(all, all.length + (all.length >> 1));
    23. }
    24. }
    25. //在某个对应的下标数组的位置添加元素
    26. public void add(int index, Object element) {
    27. //判断传入的下标是否合理
    28. if (index < 0 || index > total) {
    29. throw new IndexOutOfBoundsException(index + "越界,合理范围是:[0," + (total - 1) + "]");
    30. }
    31. //调用判断条件:是否需要设置一个新的数组
    32. grow();
    33. System.arraycopy(all, index, all, index + 1, total - index);
    34. //将元素加入数组
    35. all[index] = element;
    36. //插入元素后,数组的实际个数增加
    37. total++;
    38. }
    39. //删除下标为index的元素
    40. public void remove(int index) {
    41. //判断传入的下标是否合理
    42. if (index < 0 || index > total) {
    43. throw new IndexOutOfBoundsException(index + "越界,合理范围是:[0," + (total - 1) + "]");
    44. }
    45. //将元素前移一位覆盖掉原来下标为index的元素
    46. System.arraycopy(all, index + 1, all, index, total - index - 1);
    47. //将后面空出的元素占用的位置设置为空
    48. all[--total] = null;
    49. }
    50. //重写接口的抽象方法
    51. @Override
    52. public Iterator iterator() {
    53. return new Itr();
    54. }
    55. //创建一个匿名内部类
    56. private class Itr implements Iterator {
    57. //设定一个下标,用于指向某个元素(默认指向的是第一个元素)
    58. int cursor = 0;
    59. @Override
    60. //判断是否存在下一个数组
    61. public boolean hasNext() {
    62. return cursor < total;
    63. }
    64. @Override
    65. public Object next() {
    66. return all[cursor++];
    67. }
    68. }
    69. }

    (二)TestMyArrayList类

    1、是测试类,主程序的入口。

    2、创建MyArrayList类的对象,调用添加、删除方法,通过foreach循环进行输出。


    1. //2022.7.30
    2. public class TestMyArrayList {
    3. public static void main(String[] args) {
    4. //创建MyArrayList类的对象
    5. MyArrayList my = new MyArrayList();
    6. my.add("hello");
    7. my.add("hi");
    8. my.add(1,"enen");
    9. my.add("java");
    10. my.add("is");
    11. my.add("nice");
    12. my.add("mysql");
    13. my.add("en");
    14. my.remove(2);
    15. //遍历打印输出
    16. for (Object o : my) {
    17. System.out.println( o);
    18. }
    19. }
    20. }

    二、测试结果:

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

  • 相关阅读:
    git的一些操作
    Kafka系列之:详细介绍部署Kafka Connect分布式集群
    Java中常量池在堆中?
    vim 常用命令
    【Linux笔记】Linux基础权限
    基于51单片机智能家居家电继电器开关插座定时WiFi无线proteus仿真原理图PCB
    豆瓣点评9.3分,10w好评的《python实战案例80个实例问答》,28天基础入门,学不会我退出IT界
    猿辅导联合多方专家共议新课标:语文将更强调“实践性”
    网络-笔记
    代码随想录刷题 Day 22
  • 原文地址:https://blog.csdn.net/weixin_51733609/article/details/126077797