面向对象类的设计(ArrayBox封装)

public class ArrayBox {
    //描述事物
    //属性
    //教室容量
    private static final int DEFAULT_CAPACITY = 10;
    public int[] elementDate; //长度一旦确定不能再次发生改变
    private int size = 0; //教室中有效元素个数
    public ArrayBox(){
        elementDate = new int[DEFAULT_CAPACITY];
    }
    public ArrayBox(int capacity){
        elementDate = new int[capacity];
    }


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


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

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


    //设计方法 index是否合法 小D同学
    //  提供--index
    private void rangeCheck(int index){
        if(index < 0 || index >= size){
            System.out.println("index超过范围");
        }
    }


    //---------------------------------------------------
    //设计一个方法 获元素
    //  提供获取元素位置
    //  返回获取位置上元素
    public int get(int index){
        //检测index是否合法
        this.rangeCheck(index);//找小D同学来帮忙检测
        //如果上面一行代码可以走过去 证明index合法
        return elementDate[index];

    }

    //设计一个方法 添加元素
    //   需要的条件(参数) 返回一个结果(返回值)
    //   需要提供一把椅子 告知用户一个结果 是否存储成功boolean
    public boolean add(int element){
        //确保我自己属性数组的内部容量
        this.ensureCapecityInternal(size + 1);
        //如果上面这一行代码可以执行完毕 elementDate的教室肯定有空间
        //我想把element存入elementDate里n有效的元素个数记录一个
        elementDate[size++] = element;
        //告知用户 存储成功
        return true;//存储成功
    }

    //设计一个方法删除元素
    //  提供--元素位置
    //  返回--删除的那个元素
    public int remove(int index){
        //检测index范围
        this.rangeCheck(index);
        //如果这行代码可以执行过去 没有异常 index合法

        //将旧值index位置的旧值保存起来
        int oldValue = elementDate[index];
        //10 20 30 40 50 60 --->有效元素
        //30 删掉 box.remove(2)
        //10 20 40 50 60 0  --->size 5个
        for(int i=index;i<size-1;i++){//i==2  4
            elementDate[i] = elementDate[i+1]; //从index开始 至size-1 为止将后面元素依次前移覆盖
        }//10 20 40 50 60 60 0 0 0 0
        elementDate[--size] = 0;
        //将旧值返回给用户
        return oldValue;
    }
    public int size(){
        return this.size;
    }

}

public class Test {
    public  static void main(String[] args){
        //相当于是用户(你们)
        //想要存储元素-->第一个是数组[] 第二个是ArrayBox
        //1.创建一个box对象
        ArrayBox box = new ArrayBox();  //存储以后长度还能改变
        //2.认识那个box干活 存储一个元素(int-->小椅子)
        for(int i=1;i<=11;i++){
            box.add(i*10);
        }// 10 20 30 40 50 60
        System.out.println("有效元素个数:" + box.size());//6
        System.out.println("真实数组长度:" + box.elementDate.length);//10
        //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
        }
    }
}


"C:\Program Files (x86)\Java\jdk1.7.0_71\bin\java.exe" ...
有效元素个数:11
真实数组长度:15
10 20 30 40 50 60 70 80 90 100 110 
30
10
10 20 40 50 60 70 80 90 100 110 
Process finished with exit code 0

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值