当前位置: 首页 > article >正文

实现动态数组

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 数组类型[数组长度]

http://www.lryc.cn/news/2419506.html

相关文章:

  • 四大主流云平台对比--CloudStack, Eucalyptus, vCloud Director和OpenStack。
  • 37.绘制文本DrawText、DrawTextEx、DRAWTEXTPARAMS 使用
  • SQL语法——触发器
  • 卷!推荐11个做PPT的神仙网站
  • xshell安装错误:-1605这个操作只对当前安装的产品有效
  • 系统架构图
  • Python 三个拆分函数(split、rsplit、splitlines)不同的用法
  • PUBG介绍
  • 网页星号密码查看器_四大密码查看器 星号、浏览器保存密码、连接过的WIFI账号密码...
  • Java中慎用e.printStackTrace()
  • 2022年诺贝尔物理学奖背后的故事——贝尔不等式诞生之后
  • SurfaceView 基本使用
  • 硬件测试需要什么软件是什么原因,什么硬件软件检测温度准啊
  • zeros什么意思_什么是张量?
  • Ubuntu Touch的小确幸(Linux系统手机Ubports)
  • 数据结构(C语言版)--速成笔记【持续更新中。。】
  • MPEG-4视频压缩基础
  • 【FISCO-BCOS】 一、默认配置搭建区块链网络
  • textmate开发一个blog
  • 8个简单有用windows命令,电脑小白的高级命令!
  • MultiByteToWideCharWideCharToMultiByte 函数介绍
  • 机器学习——多项式拟合
  • java6下载安装_windows下如何安装java6.0
  • 使用C#的DrawString方法绘制文本
  • 建筑抗震设计规范
  • java入门基础教程(纯干货知识点+视频资源)
  • CC2530 zigbee模块概述与环境搭建
  • petri网基本概念
  • 【自动控制理论】 相位裕度和增益裕度
  • 数据库,万能密码与密码解析