zoukankan      html  css  js  c++  java
  • 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)告知 ,本人会尽快删除
  • 相关阅读:
    CAP概述与技术选型
    maven基础命令
    那就从头开始吧,哈哈。
    react 小细节
    二分查找法,折半查找原理
    心态很重要
    apache 软件基金会分发目录。
    jquery的基础知识复习()
    jquery的基础知识复习(基础选择器,属性选择器,层级选择器)
    CPP函数类型转换
  • 原文地址:https://www.cnblogs.com/liuyun-10/p/13293508.html
Copyright © 2011-2022 走看看