动态数组

说到动态数组,我们可能会想到在java中数组的概念,那么何为数组呢?数组就是系统给分配的内存,通俗的说就是容器,但是是一种数据类型的集合,存储的数据是同一种类型。那么有哪些特点呢?1.每个存储空间大小一致且地址连续 ;2.长度一旦确定不可更改;3. 只能存储同一类型数据 ;4. 提供角标访问元素。

所以那么要是容量不够怎么办?当然是扩容,那么怎样扩容?

  • 扩容:数据存储已经满的时候,我们需要扩容,扩容的步骤:先创建一个新的数组(新数组是原来数组的两倍),然后将原来的数组复制过来,新数据替换原来的数据
     

 

        //判断是否已满
        if(size==data.length) {
            resize(2*data.length);
        }
        for(int i=size-1;i>=index;i--) {
            data[i+1]=data[i];
        }
        data[index]=e;
        size++;
  • 在指定位置插入或删除元素元素,先找到要插入的位置,然后插入位置后面的元素后移,如下图想要在第三个位置插入元素,后面的四个元素要后移。

  •  缩容:先创建一个新的数组,然后将原来的数组复制过来,新数据替换原来的数据(条件:1、最短不能缩过默认容量;2、有效元素的个数小于等于容量的1/4)

 

if(data.length>DEFAULT_SIZE&&size<=data.length/4) {
         resize(data.length/2);    
      }
  • 缩容与扩容都依赖与resize()这个方法
    /**
      * 改变data的长度(扩容,缩容)
      * @param newLen
     */
    private void resize(int newLen) {
        // TODO Auto-generated method stub
        E[] newData=(E[]) new Object[newLen];
        /*for(int i=0;i<data.length;i++) {*/
        for(int i=0;i<size;i++) {
            newData[i]=data[i];
        }
        data=newData;
    }

 

  •  如何封装动态数组:

   我们能否用面向对象的思想对我们的数组进行封装呢?当然是可以的,我们可以把数组的相关属性和相关行为封装在类中,类似字符串String类,然后创建方法对其进行调用。那么怎么对数组封装?


1.属性方面: 

    int size 数组的有效元素个数

    int capacity 数组的最大容量data.length

    E[ ] data 数组的存储容器 (E泛型)

2. 行为方面:增、删、改、查、其他

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值