ArrayList 源码

  学习java不看点源码,怎么能说你学过java呢!

  这一章,我过一下简单的ArrayList源码,学习源码先从简单入手吧。哈哈,像Spring、SpringBoot等以后再看,简单入手,循序渐进吧,别着急,……

  那我们先开始ArrayList这个源码吧!

  

   (这家伙,上来就扔一张图,你也太随意了吧。哈哈,没办法,我也不会写文章,就这样将就着看吧,弄看懂就行!)看到这个我们就会看到这个

DEFAULT_CAPACITY = 10,也就是说ArrayList的默认的初始化是10。EMPTY_ELEMENTDATA = {}就是空数组了。
  接下来,应该关心是啥?知道了初始的容量,那么扩容是怎么扩容的?


 这里面就可以看出来新的容量是oldcapacity+(oldCapacity >> 1)也就是说扩容后是原来的1.5倍,下面的判断如果最小容量小于10,则容量为默认的容量10.

接下来一个问题就是ArrayList是线程不安全的,那么为什么他是线程不安全的呢?我们看一下源码add():

 这个modCount++;如果是高并发的情况下,同一个位置有没有可能被覆盖,或者size不对应等情况产生?这也许就是ArrayList线程不安全的原因之一。相对ArrayList的线程安全是Vector,其实大家去看一下源码就知道了,这两者最大的不同就是vector的方法都有synchronized同步锁修饰,虽然线程安全了,但是性能却降低了不少。

其他的就是ArrayList的一些方法,可以看看。
 
作者:战旗 内容声明: 本内容属自己学习使用 ,若有抄袭情邮件(zhanqi3712@qq.com)告知 ,本人会尽快删除
原文地址:https://www.cnblogs.com/liuyun-10/p/13293508.html