当前位置: 首页 > news >正文

上海建设公司网站wordpress企业站模板下载

上海建设公司网站,wordpress企业站模板下载,网络广告设计制作,在线设计平台的消费者分析参考视频:韩顺平Java集合 ArrayList特点 ArrayList 可以加入 null,包括多个。 ArrayList 是由数组来实现数据存储的 ArrayList 基本等同于 Vector,除了 ArrayList 是线程不安全(执行效率高)。在多线程情况下&#xf…

参考视频:韩顺平Java集合

image.png

ArrayList特点

  • ArrayList 可以加入 null,包括多个。

  • ArrayList 是由数组来实现数据存储的

  • ArrayList 基本等同于 Vector,除了 ArrayList 是线程不安全(执行效率高)。在多线程情况下,不建议使用 ArrayList

    • 例如 ArrayList 的 add() 的源码:可以发现没有 synchronized 关键词修饰
    public boolean add(E e) {  modCount++;  add(e, elementData, size);  return true;  
    }
    

ArrayList 源码分析(重难点🚩)

  1. ArrayList 中维护了一个 Object 类型的数组 elementData
    transient 意为短暂的;表示该属性不会被序列化

    transient Object[] elementData;
    
  2. 当创建对象时,如果使用的是无参构造器,则初始 elementData 容量为 0 (jdk7是10)

  3. 当添加元素时:先判断是否需要扩容,如果需要扩容,则调用 grow 方法,否则直接添加元素到合适位置

  4. 如果使用的是无参构造器,如果第一次添加,需要扩容的话,则扩容 elementData 为 10,如果需要再次扩容的话,则扩容 elementData 为 1.5 倍。

  5. 如果使用的是指定容量大小的构造器,则初始 elementData 容量为指定大小

  6. 如果使用的是指定容量大小的构造器,如果需要扩容,则直接扩容 elementData 为 1.5 倍。
    [[ArrayList源码分析]]

源码示例

未指定初始容量

注意将 idea 的调式工具设置一下,以便更好的观察数据:
image.png|575

  • 测试源码:

    • 观察调用构造器,创建 ArrayList 的实例的细节
    • 观察第一次添加元素(初次扩容)
    • 观察第二次添加元素(不用扩容)
    • 观察第十一次添加元素(第二次扩容)
    • 观察第十六次添加元素(第三次扩容)
    @Test  
    public void test1(){  ArrayList list = new ArrayList();  for (int i = 11; i <= 20; i++) {  list.add(i);  }  for (int i = 21; i < 26; i++) {  list.add(i);  }  list.add(100);  list.add(200);  list.add(null);  System.out.println(list);  
    }
    

创建 ArrayList 实例

  • 创建一个长度为 0 的空数组,并赋给 elementData,elementData 就是集合底层存储数据的数组。
    image.png|650

第一次添加元素“11”

  • 将 int 数据进行装箱
  • 添加这个数据“11”,要保证数组的长度至少为当前元素数+1。(size+1=1)
  • ensureCapacityInternal() 的作用就是检查数组够不够此次添加所需的容量,如果不够,则扩容,更改 elementData ,将其用扩容后的数组替代。
    image.png|600
  • calculateCapacity() 的作用仅仅在于,检查当前操作是否是第一次添加数据。因为第一次添加元素,扩容机制应该将其扩容到 10(除非要添加的元素本身需要的容量大于 10)。
  • 而对于非第一次添加的元素,其所需容量依旧是传进来的参数
    image.png|650
    image.png|700
  • 那么根据判断,此次显然是第一次添加元素,数组为空数组,且所需容量 var1=1,<10。那么此时 var0=10,这就确定了最终数组所需要的容量大小。作为参数传递给 ensureExplicitCapacity() 中。
    image.png|650
  • modCount 为当前集合被修改的次数。需要自增。
  • 最后进行检查:目前数组的容量(elementData.length)是否满足所需要的容量大小(var1)呢?
  • 显然,目前的数组大小为 0,而我们所需要的容量为 10。所以需要扩容。进入到 grow() 中,进行真正的扩容操作。
    image.png|600
  • 所需的容量大小为 var1=10,作为参数传递进来。
  • var2=数组目前的容量==(var2=0)==
  • var3=扩容为当前数组容量的 1.5 倍,不过在初次扩容中,此次操作不起作用==(var3=0)==
  • 判断扩容后的容量大小 var3 是否满足,所需的大小 var1,不满足则依照 var1。(var3=10)
  • 判断扩容后的容量是否在数组的取值范围内。
  • Arrays.copyOf():创建一个指定长度的数组==(10)==的数组,并将原数组中的数据拷贝至该数组,并赋值给 elementData
  • 至此,数组的扩容完成(elementData.length 从 0 扩容到 10)回到 add 的主逻辑中:
    image.png|600
  • 添加元素“11”添加到数组 elementData[0]中,并且 size=1;

第二次添加元素“12”(不用扩容)

  • 将 int 数据进行装箱
  • 添加这个数据“12”,要保证数组的长度至少为当前元素数+1。(size+1=2)
  • ensureCapacityInternal() 的作用就是检查数组是否大于等于 2(够不够此次添加所需的容量)。如果不够,则扩容,更改 elementData ,将其用扩容后的数组替代。
    image.png|600
  • 此时由于不是第一次添加,数组长度不为 0,所以 calculateCapacity() 执行后返回 2
    image.png|600
    image.png|700
  • 集合修改次数+1
  • 当前数组长度==(elementData.length=10)满足所需长度(var1=2)==,所以不需要扩容。
    image.png|550
  • 回到主逻辑中:
    image.png|600
  • elementData[1]存放 var1。size 变为 2。

观察第十一次添加元素(第二次扩容)

  • 此时数组容量为 elementData.length=10,所需容量大小为 var1=11,在这一步时,容量不够,所以需要进行扩容,进入 grow()
    image.png|650
  • var2=10,var3=15(扩容 1.5 倍)
    image.png|600

同理,后面每一次添加和扩容都与以上的步骤一致。

指定初始容量

  • 与未指定的区别在于,调用的是带参的构造器。
  • 指定了初始容量 var1,则创建一个初始容量为 var1 的数组。如果本身为 0,就仍旧赋值为空数组(与无参的一致)
  • 在之后的扩容中,依旧是按照 1.5 倍扩容。
  • 例如指定初始容量为 8,则初次扩容为 8->12
    image.png
http://www.dtcms.com/a/404561.html

相关文章:

  • 网站秒收录工具沧州网站设计师招聘
  • 建网站大公司企业网址一般怎么设置
  • 已经有域名 如何建网站社保网站哪里做转入
  • 关于自行建设门户网站的请示长春做网站大公司
  • 凡科删除建设的网站开发流程有哪些阶段
  • 高校文明建设网站seo伪原创工具
  • 美丽寮步网站建设wordpress博客数据放在哪里的
  • 大型网站建设兴田德润实惠公司域名备案
  • 厦门手机网站制作做内部网站费用
  • 机械厂网站建设方案wordpress打开越来越慢
  • 天河网站建设方案做淘宝客没网站吗
  • 为什么做旅游网站用国外网站 图片做自媒体
  • 网站设计英文网架加工费多少钱一吨
  • 重庆手机网站方案设计吉林学校网站建设
  • 哪个网站可以做线上翻译赚钱广州电子商务网站建设
  • [优选算法专题三二分查找——NO.19x 的平方根 ]
  • 网站后台管理系统 模板深圳网站网页制作
  • 网站退出率是什么意思做外贸产品上什么网站
  • 网站开发 小程序开发如何做百度推广的网站
  • 网页制作怎么做多个网站网站设计的基本流程是什么
  • oracle 网站开发网站在只有域名了
  • 四川做网站设计的公司搜索服务公司
  • 在线建站网页制作网站建设平台大型农村电商平台
  • 单页网站在线制作如何在百度开个网站
  • 成都手机网站建设哪网站如何做淘宝客
  • [优选算法专题三.二分查找——NO.20搜索插入位置 ]
  • 顺德品牌网站建设公司西安建百度网站的公司
  • 快递网站怎么制作深圳科技公司
  • 建设银行英文网站有什么网站可以做婚庆视频素材
  • SQLAlchemy 库