zoukankan      html  css  js  c++  java
  • ArrayList知识点

    1.扩容机制

     

      1.扩容是懒惰式的,即没有添加元素前,即时指定了容量,也不会真正的创建数组

      2. add(Object o) 方法首次扩容为10,再次扩容为上次的1.5倍

      3. addAll(Collection c) 方法首次扩容(没有元素)为10,或者添加的元素实际个数,取两者间的最大值

      4. addAll(Collection c) 方法再次扩容(有元素时)取原容量1.5倍或者实际元素个数,取两者间最大值.

     

     

    2. fail-fast 与 fail-safe 机制

      1. fail-fast : 一旦发现遍历集合的同时,其他人来修改则立即抛出异常

      2. fail-safe : 发现遍历集合的同时其他人来修改,应当能有应对策略,例如牺牲一部分一致性,来让整个遍历运行完成

      3. ArrayList 是fail-fast的典型代表,遍历同时不能修改,底层实现是在遍历前记录了集合的修改次数,在循环过程中如果发现集合的修改次数与遍历前记录的不一致,直接抛出并发修改异常

      4. CopyOnWriteArrayList 是 fail-safe的典型代表,遍历的同时可以修改,原理是读写分离,就是在修改集合的时候,底层会创建一个新的数组,复制出之前的数据并添加修改后的数据,但是遍历时使用的还是旧的数组,所以不会报错,但是遍历时也不会读取到新添加的数据.

     

     

    3. ArrayList 与 LinkedList 的比较

     

      1. ArrayList

        1. 基于数组,需要连续内存

        2. 随机访问快(指根据下标访问)

        3. 尾部插入,删除性能可以,其他部分插入,删除都会移动数据,因此性能低

        4. 可以利用 cpu 的缓存,通过局部性原理

      2. LinkedList

        1. 基于双向链表,无需连续内存

        2. 随机访问慢 (要沿着链表遍历)

        3. 头尾插入,删除性能高,但是中间插入查找位置效率慢,所以性能低

        4. 占用内存多

  • 相关阅读:
    php 判断访问是否是手机或者pc
    SQLSTATE[HY000] [2002] No such file or directory
    No input file specified.
    Call to undefined function openssl_decrypt()
    Parse error: syntax error, unexpected 'class' (T_CLASS)
    tp5关联模型进行条件查询
    windows下php7.1安装redis扩展以及redis测试使用全过程
    SourceTree跳过初始设置
    对象数组(JSON) 根据某个共同字段 分组
    SDUT 3377 数据结构实验之查找五:平方之哈希表
  • 原文地址:https://www.cnblogs.com/xuxiaobai13/p/15437642.html
Copyright © 2011-2022 走看看