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. 占用内存多

  • 相关阅读:
    spring aop 之链式调用
    Java中的java.lang.Class API 详解
    Java 内省(Introspector)和 BeanUtils
    Small Spring系列一:BeanFactory(一)
    (C#) 多线程访问探讨,如果保证线程安全?
    (C#) 多线程访问int, bool 等值类型变量
    (WCF) 利用WCF实现两个Process之间的通讯。
    (PowerShell) 重命名文件
    JavaScript : Array assignment creates reference not copy
    (C#) 表达式树
  • 原文地址:https://www.cnblogs.com/xuxiaobai13/p/15437642.html
Copyright © 2011-2022 走看看