实现动态数组

1.数组可以干什么?

1)数组的唯一属性——长度,定义后,不可修改,有容量限制

2)下标,可以通过下标遍历数组中的元素

     -增删查改

     -反复增删查改后,不一定确切的知道存储的元素数量

3)可以定义多维数组

4)可以定义存储的数据类型

2.实现一个自己的动态数组

属性:

-长度

-下标

-元素个数

-存储数组

public class ArraylistDIY {
    //属性:
    //长度
    int length;
    //下标
    int index;
    //元素个数
    int size;
    //存储数组
    Object [] Array={};
    //是空数组,但不是空指针,不是null

构造方法:

-根据使用者传入的长度进行初始化,主要目的就是为了有一个初始容量

 public ArraylistDIY(int initialCapacity){
        //初始化容量,且保证输入的容量值不为负
        if(initialCapacity<=0){
            throw new IllegalArgumentException("初始化容量不成立");}
        //在构造方法中为创建的对象初始化赋值
        //根据初始化容量,初始化数组
        length=initialCapacity;
        //否则长度不会随容量的改变而改变
        Array=new Object[initialCapacity];

       // 相当于写Object ob2=new Object[];
        //       Array=ob2;
        //初始化其他属性
        //不能定义length,要保证length始终与容量是一致的
        index=0;
        size=0;

    }

方法:

-add

public void add(Object ob){
        //检测数组的容量是否大于等于数组的length
        if(index>=length){
           //需要创建一个length更大的数组
          int newlength=length+(length>>1);
           //改为原长的1.5倍
           Object[]newArray=new Object[newlength];
           //创建了一个新长度的空数组
           //将旧数组中的数据取出来给到新数组
           for(int q=0;q<length;q++){
               newArray[q]=Array[q];
          }
            //替换数据
            Array=newArray;
           length=newlength;

        }
        Array[index]=ob;
        index++;
        size++;

    }
    

-get

public Object get(int num){
        Object obj=0;

        //根据下标值获取,判断下标值是否超过length
        if(num<length&&num>=0){
             obj= Array [num];

        }
      else {
          throw new ArrayIndexOutOfBoundsException("index超过范围");
        }
      return obj;
    }

-remove

public void remove(int num){
        //Object obj=0;
        if(num<length&&num>=0){
            Array[num]=null;
            //obj=Array[num];
            //obj是得到了一个地址
            //obj=null;
            //obj为空,但Array[num]不是

        } else{
            throw new ArrayIndexOutOfBoundsException("index超过范围");
        }
    }

-程序实现

public static void main(String[]args){

       ArraylistDIY arraylistDIY=new ArraylistDIY(10);
       //创建对象后,自动调用构造方法
       for(int w=0;w<20;w++){
       arraylistDIY.add("hello");}
       arraylistDIY.remove(10);
      Object a2= arraylistDIY.get(9);
       System.out.println(a2);
       }
    }

问题集:

1.构造方法是什么

定义方式:[public]  构造方法名(参数){方法体}  

构造方法名与类名一致,且没有返回值,不需要用void修饰

一个类中可以定义多个构造方法(参数要有区别)

作用:在构造方法中为创建的对象初始化赋值

在创建对象时系统会自动调用

2.数组初始化的目的及方法

目的:为数组中的数组元素分配内存空间,为每个数组元素赋值

 java中的数组必须先初始化,然后才能使用

方法:动态初始化:初始化只指定数组长度,由系统为数组分配初始值

格式:数组类型[]数组名=new 数组类型[数组长度]


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值