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)告知 ,本人会尽快删除
  • 相关阅读:
    安卓手机!用swiper做轮播效果,两张图片之间会有一个像素的空白
    手机端swiper快速滑动会有白屏
    axios请求下载excel文件
    人人都能学会的webpack5搭建vue3项目(二)配置Vue
    人人都能学会的webpack5搭建vue3.0项目,可应用于生产环境 (一)
    mybatis 生成 mapper文件
    超强工具类系列
    mybatis 自动生成mapper文件
    面试
    linux安装mysql8.0.25
  • 原文地址:https://www.cnblogs.com/liuyun-10/p/13293508.html
Copyright © 2011-2022 走看看