浅析ArrayList的内部实现

本文浅析ArrayList的内部实现,从自定义MyArrayList出发,详细解释了添加、在指定位置添加、根据索引查询和删除元素的逻辑,涉及数组扩容、元素移动等关键步骤。通过对源码的解读,揭示ArrayList的工作原理。
摘要由CSDN通过智能技术生成

        ArrayList的特性:可以自由扩展,存储任意多个数字,弥补了数组的定长的缺陷,但是他的内部还是数组!为什么ArrayList可以自由扩展? 下面我们用代码来演示下ArrayList的内部实现!

        首先我们定义一个MyArrayList,既然是集合,集合的内部实现都是数组,我们定义一个MyArrayList里面包含一个Object类型的数组和一个int 类型的size。size是用来存储数组中存储了多少个Object!

publicclass MyArrayList {

       Object []arr=new Object[2];  //定义一个数组

        intsize=0;   //存入了多少数到数组里面的记录!

                         (数组里面有多少个数)当记录数等于数组的长度时就需要扩容

} 

        这样我们自己的MyArrayList就定义好了,在ArrayList中有添加数,在指定位置添加数,根据索引查询,根据索引删除,删除指定对象等方法,用代码来实现:

        首先定义一个添加的方法add(Object object); 我们只需要将传进来的object添加到上面定义好的arr的数组中,但是数组的长度只有2个,当我们添加第三个object的时候,就会越界,下面我们要做的是将arr数组的长度增加!如何做了?

代码实现如下:

/*添加数据,判断扩容*/

publicvoid add(Object num){

       if(arr.length==size){

             Object[]   temp =  new Object[arr.length*3/2+1];

             System.arraycopy(arr, 0, temp, 0,size);

             arr=temp;

      }                                                                                                                                                    

      arr[

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值