其他分享
首页 > 其他分享> > ArrayList面向对象(功能实现)

ArrayList面向对象(功能实现)

作者:互联网

主要是思路


ArrayList底层其实也就是个数组,所以我们需要定义一个(integers[]),数组的话就肯定会有一个长度(initialCapacity初始容量)(这俩个是肯定能想到的),有长度的话也并不行,因为我们的数组不一定存储多少个数据,所以需要有个变量记录个数(size)。

构造函数可以有无参和有参,因为我们的数组需要给初始容量赋值,所以我们的第一个无参构造函数就直接给了默认值,然后写我们的有参构造函数,传入初始容量赋值,但我们发现第一次写的无参构造函数和我们的有参构造函数很像,所以可以进行优化就有了我们第二个无参构造函数。

数组有俩个问题(我们提前解决一下):1.初始容量一旦定下来无法改变;2.索引问题
indexCheck()方法就负责检查我们的索引,不在我们的范围内就返回false
guaranteeCapacity(size)负责扩容,传入我们的size,size代表当前存储元素的个数,如果size+1大于capacity就说明我们的容量不足了,此时进行扩容(扩容System.arraycopy方法,就是创建一个新数组,然后把数组原来的数据复制到我们的新数组,再把新数组给我们的旧数组)

第一个add方法:在末尾添加一个元素,所以不需要检查索引只需要查看扩容问题。存储成功后size++
第二个add方法:在索引处添加元素,需要检查索引和扩容问题

System.arraycopy方法-src原数组 srcPos开始位置索引 dest木标数组 destPos目标数组开始索引 length长度 ``` public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length); ```
![](https://www.icode9.com/i/l/?n=22&i=blog/2815362/202207/2815362-20220723203313618-1451966519.png) 第一个delete方法:删除末位元素,完成后size-- 第一个delete方法:删除索引位元素,然后也使用System.arraycopy,完成后size-- ![](https://www.icode9.com/i/l/?n=22&i=blog/2815362/202207/2815362-20220723204846026-822318336.png) change方法就没有什么特别的了,改变特定位置的变量。 ##
点击查看全部代码-已进行实力测试,达到预期
package com.jr.learn0722.Demo1.test2;
//超级数组,其实也是使用数字实现的
public class SupArray {

     Integer [] integers;
//     数组内拥有元素的个数
     Integer size=0;
//     数组初始长度
     Integer initialCapacity;
//     构造函数
//     public SupArray(){
//          initialCapacity=10;
//          integers=new Integer[initialCapacity];
//     }
     public SupArray(){
          this(5);
     }
     public SupArray(Integer initialCapacity){
          integers=new Integer[initialCapacity];
          this.initialCapacity=initialCapacity;
     }
//     添加元素方法
     public void  add(Integer num){

          guaranteeCapacity(size);
          integers[size]=num;
          size++;
     }
     public void  add(Integer index,Integer num){
          if (indexCheck(index)){
          guaranteeCapacity(size);
          System.arraycopy(integers,index,integers,index+1,size-index);
          integers[index]=num;
          size++;
          }
     }
     public void delete(){
          integers[size-1]=null;
          size--;
     }
     public void  delete(Integer index){
          if (indexCheck(index)){
               System.arraycopy(integers,index+1,integers,index,size-(index+1));
               size--;
          }
     }

     public  void change(Integer index,Integer num){
          if (indexCheck(index)){
               integers[index-1]=num;
          }
     }
     public Integer[] getIntegers() {
          return integers;
     }

     public boolean indexCheck(Integer index){
          return index>=0&&index<=size-1;
     }

     public void guaranteeCapacity(Integer size){
          if (size+1>initialCapacity){
               initialCapacity=initialCapacity+(initialCapacity>>1);
               Integer [] integers1=new Integer[initialCapacity];
               System.arraycopy(integers,0,integers1,0,size);
               integers=integers1;
          }
     }

}

标签:index,功能,integers,ArrayList,initialCapacity,面向对象,Integer,public,size
来源: https://www.cnblogs.com/404tly/p/16512895.html