首页 > 其他分享 >ArrayBox封装

ArrayBox封装

时间:2023-06-07 16:45:24浏览次数:36  
标签:box 封装 ArrayBox int 元素 数组 public

设计一个类 替代数组可以做的事情
数组 长度是固定 存储一组元素
长度一旦固定 使用起来不太方便 添加元素 删除元素
设计一个类---充当一个小容器 ArrayBox
能添加元素 获取元素 删除元素 看一看到底有几个

//你们是使用者(用户)                   我是ArrayBox类型的一个具体的对象
//想要存储椅子             你们把椅子直接交给我box
//以前直接找到数组那个人     我就可以帮你们存起来啦
//存储的时候你们自己找位置      至于我把椅子存在了哪里 长度够不够 都不用你们管
//如果数组存满啦自己想办法


数组是一个开发者创建好的类型
数组是一个小容器 存储一组元素
添加元素 获取元素 删除元素
1.创建一个数组对象 1.创建一个ArrayBox对象
int[] array = new int[10]; ArrayBox box = new ArrayBox();
2.添加元素 2.添加元素
array[0] = 10; box.add(10);
3.获取元素
int value = array[0];
通过说明(异常)来告知
4.遍历
for(int i=0;i<array.length;i++){
array[i];
}

 

ArrayBox.java

public class ArrayBox<E> {//泛型
    //描述事物
    //属性
    // 一间小教室
    private static final int DEFAULT_CAPACITY = 10;
    private Object[] elementData;//长度一旦确定不能再次发生改变
    private int size = 0;//记录教室中有效的元素个数

    public ArrayBox(){
        elementData = new Object[DEFAULT_CAPACITY];
    }
    public ArrayBox(int capacity){
        elementData = new Object[capacity];
    }

    //你们是使用者(用户)           我是ArrayBox类型的一个具体的对象
    //想要存储椅子                 你们把椅子直接交给我box
    //以前直接找到数组那个人       我就可以帮你们存起来啦
    //存储的时候你们自己找位置     至于我把椅子存在了哪里 长度够不够 都不用你们管
    //如果数组存满啦自己想办法

    //方法
    //设计方法 帮忙判断给定index范围是否合法  小D同学
    //      需要提供一个index
    private void rangeCheck(int index){
        if(index<0 || index>=size){
            //参考数组的操作  自己定义一个异常(自己创建的类)来说明这个问题
            throw new BoxIndexOutOfBoundsException("Index:"+index+",Size:"+size);
        }
    }

    //设计方法 帮我自己做事的 小A同学
    //      需要提供一个条件  老师需要的最小容量
    //      没有返回值
    private void ensureCapacityInternal(int minCapacity){
        if(minCapacity - elementData.length > 0){
            //证明老师需要的最小容量 比原来教室的容量还要大 存不下啦
            //扩容---> 小B同学
            this.grow(minCapacity);
        }
    }

    //设计方法 帮助教室扩容(新教室) 小B同学--数学很好但倔强的天才
    //      需要提供一个条件  老师需要的最小容量
    private void grow(int minCapacity){
        //获取旧教室的长度
        int oldCapacity = elementData.length;
        //小B同学 做了一个觉得很好的算法  旧教室1.5倍扩容
        int newCapacity = oldCapacity + (oldCapacity >> 1);
        //若按照这个很好的算法扩容后  所需要的空间还不够 直接利用minCapacity
        if(newCapacity - minCapacity < 0){
            newCapacity = minCapacity;//将老师提供的赋值给newCapacity
        }
        //经过一通计算  最终获取到一个合理的长度 newCapacity
        //按照这个新的长度 创建一个新的教室 旧教室的椅子全部搬入到新教室中
        elementData = this.copyOf(elementData,newCapacity);//小C同学做完事情之后 得到一个新教室
    }

    //小C同学--->设计一个方法  负责创建一个新数组
    // 将旧数组的元素全部移入新数组内  干体力活的
    //      需要新数组的长度  需要提供旧数组
    //      需要告知新数组的位置---返回新数组
    private Object[] copyOf(Object[] oldArray,int newCapacity){
        //创建一个新的数组(新的小教室)
        Object[] newArray = new Object[newCapacity];
        //将旧数组元素全部移入新数组内
        for(int i=0;i<oldArray.length;i++){
            newArray[i] = oldArray[i];
        }
        //将新数组返回
        return newArray;
    }


//==================================================================================
    //需要设计一个方法  用来添加元素
    //      提供什么条件(参数)   返回一个结果(返回值)
    //      需要提供一把椅子int  告知用户一个结果 是否存储成功 boolean
    public boolean add(E element){//创建box对象时 规定的类型
        //确保我自己的属性数组的内部容量
        this.ensureCapacityInternal(size + 1);
        //如果上面的这一行代码可以执行完毕  elementData的教室肯定有空间
        //我想把element存入elementData里  有效元素个数多记录一个
        elementData[size++] = element;
        //告知用户 存储成功
        return true;//表示成功
}
    //需要设计一个方法  用来获取元素
    //      提供什么条件(参数)      返回结果(返回值)
    //      提供获取元素的位置       获取位置上的那个元素(int--小椅子)
    public E get(int index){
        //检测index范围是否合法
        this.rangeCheck(index);//找到小D同学来帮忙检测
        //如果上面一行代码可以走过去 证明index是合法
        return (E)elementData[index];
    }
    //需要设计一个方法  用来删除元素
    //      提供元素的位置     返回值---删除掉的那个元素
    public E remove(int index){
        //检测index范围
        this.rangeCheck(index);
        //如果这行代码可以执行过去  没有异常  index合法
        //将index位置的旧值保存起来
        E oldValue = (E)elementData[index];
        //10 20 30 40 50 60 0 0 0 0--->有效元素
        //30数字删掉     box.remove(2);
        //10 20 40 50 60 0 0 0 0 0--->size  5个
        for(int i=index;i<size-1;i++){//i==2 3 4
            elementData[i] = elementData[i+1];//从index开始 至size-1为止 将后面位置元素依次前移覆盖
        }//10 20 40 50 60 0 0 0 0 0
        elementData[--size] = null;//末尾元素清空
        //将旧值返回给用户
        return oldValue;
    }
    public int size(){
        return this.size;
    }

}

  

BoxIndexOutOfBoundsException.java
public class BoxIndexOutOfBoundsException extends RuntimeException{
    //想要描述这个类是一个(我们自己的异常 is a 异常)异常
    //继承extends  泛化(实现)implements

    public BoxIndexOutOfBoundsException(){}
    public BoxIndexOutOfBoundsException(String msg){
        super(msg);//msg提供给父类
    }
}

  

Test.java

public class Test {
    public static void main(String[] args){
        //相当于是用户(你们)
        //想要存储元素----->第一个是数组[]  第二个是ArrayBox
        //1.创建一个box对象
        ArrayBox<Integer> box = new ArrayBox<Integer>(6);//存储以后长度还能改变
        //2.让box干活去  存储一个元素(int-->小椅子)
        for(int i=1;i<=6;i++){
            box.add(i*10);
        }//10 20 30 40 50 60 0 0 0 0
        System.out.println("有效元素个数:"+box.size());//6
        //3.获取第全部元素
        for(int i=0;i<box.size();i++){
            int value = box.get(i);
            System.out.print(value+" ");//10 20 30 40 50 60
        }
        System.out.println();
        //4.删除2号索引位置的元素
        int removeValue = box.remove(2);
        System.out.println(removeValue);//30
        System.out.println(box.size());//5
        for(int i=0;i<box.size();i++){
            int value = box.get(i);
            System.out.print(value+" ");//10 20 40 50 60
        }

    }
}

  

 

标签:box,封装,ArrayBox,int,元素,数组,public
From: https://www.cnblogs.com/yonlanmoji/p/17463824.html

相关文章

  • JAVA基础知识总结系列:JAVA封装
    封装(面向对象特征之一):是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。好处:将变化隔离;便于使用;提高重用性;安全性。封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问。this:代表对象。就是所在函数所属对象的引用。this到底代表什么呢?哪个对象......
  • 【React工作记录八十八】React+antDesign封装一个tab组件(类组件)
    前言我是歌谣放弃很容易但是坚持一定很酷喜欢我就一键三连哈微信公众号关注前端小歌谣在我们的工作生活中每次学习一个框架我们就不免要封装组件而具备封装一个完美组件的能力我称之为"优秀"简单的父子组件父组件<Geyao/>子组件importReact,{Component}from'react';......
  • Ajax的步骤与封装 AJAX中的200和4分别是什么意思
    1)、AJAX的步骤:ajax的流程,readyState和status的意思​1、创建XMLHttpRequest​letxhr=newXMLHttpRequest()​2、设置(请求方式,请求路径,请求参数)​xhr.open("get","regSave.php?username=jzm&userpass=123",true)​3、设置回调函数(后端有响应时,调用的回调函数)​......
  • API接口获取快手商品详情(封装代码)
    快手是中国最大的短视频平台之一,也是许多电商企业进行推广的重要渠道。为了更好地了解快手的商品信息,我们可以通过API接口来获取商品详情。首先,我们需要了解快手API接口和相应的文档接下来,我们需要准备请求接口的工具。在这里,我要介绍Python语言和requests库。requests是一个很......
  • 一篇文章带你详细了解axios的封装
    axios封装对请求的封装在实际项目中是十分必要的,它可以让我们统一处理http请求。比如做一些拦截,处理一些错误等。本篇文章将详细介绍如何封装axios请求,具体实现的功能如下基本配置配置默认请求地址,超时等请求拦截拦截request请求,处理一些发送请求之前做的处......
  • element-ui 组件二次封装
    习题链接element-ui组件二次封装课程列表修复bug,实现elementui组件中的单选功能。关键点作用域插槽(ScopedSlots)在父组件中使用slot-scope="scope"指定了一个名为scope的变量,当然也可以使用其他名称在插槽中就可以使用scope是点父组件中的数据ElementUI组件的Radi......
  • 【了不起的芯片 - 读书笔记】CPU 的制作流程 ( 晶圆制作 | 光刻机光刻流程 | 蚀刻过程
    文章目录一、晶圆制作二、光刻机光刻流程三、蚀刻过程四、涂层过程五、重复上述步骤若干次六、芯片封装一、晶圆制作晶圆制作是半导体芯片制造的关键过程,它涉及将硅晶片(或其他半导体材料)转化为可以用于集成电路制造的基础材料。下面是晶圆制作的主要步骤:单晶生长:通过化学气相沉......
  • java 封装
    1.面向对象思想为什么使用面向对象使人和计算机的交流更加流畅;提高开发效率生活中/计算机描述对象对比生活中的对象定义:看的见摸得着的都是对象计算机中的对象的定义:1.类2.属性3.方法类图使用类图描述类:用于分析和设计类;直观,容易理解; ......
  • VB运行库+FlashPlayer国际去广告版安装脚本(支持静默安装封装部署时调用)
    前言:此脚本可静默安装VB运行库和flash国际版三合一程序,flash是去广告最新版,已测试不会有乱七八糟的弹窗广告,绿色无毒!!制作脚本的目的主要是为了离线封装系统时方便在部署阶段调用安装支持库。个人认为,离线封装系统是最绿色的,避免了二次封装破坏系统的稳定性,而且第三方封装工具都......
  • Excel打印封装
    准备部分1、安装依赖npminstallvue-print-nb--save2、main.js全局安装importPrintfrom'vue-print-nb'Vue.use(Print);组件部分/components/ExcelForm.vue<template><div><divclass="btn"><el-buttonsize="......