Arraylist 的源码分析

 Arraylist 的源码分析

默认长度是是十个字节


这两个一个是默认的,一个是用来增长扩容的。

如果不写长度就是一个objec []

写了小于零就会抛出异常。


这表明是一个瞬态的

 

先判断长度,在判断是否是空对象数组,如果不是自动扩容,长度就是参数集合的长度,

我们点击进去看一次copyarray 的源码

 

使用了大量的泛型

如果都是object[]的类型,就直接的扩容。变成新的长度。

 

不是的情况下回比较原始的和现在传进来的长度。新 new 数组

然后在执行

Arraycopy 的方法。

 

去空先判断长度,在判断是否等于零

等于零就返回一个object[],不等于零在复制一个数组,类型还是原始的类型。


数组的长度已经超过限制就会报oom,因为新建数组的时候jvm 会自动的分配内存。

我们来模拟一下


我们来看一下grow()这个方法

 


扩容1.5倍

 

如果小于最小的按照最小的,

如果大于最大的,调用hugeacpactiy()来判断,这个方法要判断是否OOM

 

如果大于最大的长度,取Integer.MAX_VALUE,否则就是取MAX_ARRAY_SIZE

 

判断是否为空就是判断长度是否是零

判断是否包含

 



其实就是遍历获得下标来判断

获得最后的下标数,其实就是反过来。

                                                                                                              

这是克隆方法,底层也是复制,但是modcount给初始化了。

核心

 

先区间检查

大于这个范围就报数组下标越界

 

 

就是根据下标从数组中取值。

 

Add 这就说明是可以重复的,和value的值没关系。

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liumce

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值