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)告知 ,本人会尽快删除
  • 相关阅读:
    Linux内核调试方法
    linux查看系统的日志------健康检查特性
    检测磁盘驱动的健康程度SMART
    用十条命令在一分钟内检查Linux服务器性能
    Nginx安装及配置
    getopts的使用
    grub rescue 主引导修复
    linux C中调用shell命令和运行shell脚本
    Makefile基础---编译
    OVMF基础
  • 原文地址:https://www.cnblogs.com/liuyun-10/p/13293508.html
Copyright © 2011-2022 走看看