zoukankan      html  css  js  c++  java
  • ArrayList 源码

    1、ArrayList的类关系:
    2、属性及方法
         2.1 构造
              三个构造方法分别对应:
                   通过传入初始化容器大小构造数组列表
                   构造一个空的数组列表
                   通过传入的集合数据构造数组列表容器
         3.1方法
             clone的拷贝模式?
              ArrayList默认clone方法使用Arrays.copyof是浅拷贝(将新的数组引用原数组的对象,修改数组元素会对拷贝后的数组有影响。)
              锁升级?
    3、操作
         由于ArrayList底层通过有序列表实现,其插入操作和删除操作时间时间复杂度是O(n),查找操作时间复杂度是O(1)
    4、存储控制
         构造ArrayList默认的大小是10
         增长策略:
         
     1 private void grow( int minCapacity) {
     2         // overflow-conscious code
     3         int oldCapacity = elementData .length ;
     4         int newCapacity = oldCapacity + (oldCapacity >> 1);//按1.5倍增长
     5         if (newCapacity - minCapacity < 0)
     6             newCapacity = minCapacity ;
     7         if (newCapacity - MAX_ARRAY_SIZE > 0)
     8             newCapacity = hugeCapacity( minCapacity );
     9         // minCapacity is usually close to size, so this is a win:
    10         elementData = Arrays.copyOf( elementData , newCapacity );
    11     }
    12  
    13     private static int hugeCapacity( int minCapacity) {
    14         if (minCapacity < 0) // overflow
    15             throw new OutOfMemoryError();
    16         return (minCapacity > MAX_ARRAY_SIZE) ?
    17             Integer. MAX_VALUE :
    18             MAX_ARRAY_SIZE ;
    19     }
    View Code
         ArrayList支持的最大值:    
      private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;
    5、并发
         ArrayList在add、set等操作中都没有类似 Synchronization 、lock等处理,该类是非并发安全的类,在并发中应该由开发人员自行控制并发的安全性,或者使用并发安全的集合类替换。
  • 相关阅读:
    当公有云Azure拥抱Docker容器技术
    .NET AJAX实例
    漫谈Ajax在.Net中的使用
    .NET运用AJAX 总结及其实例
    Excel自动从身份证中提取生日、性别、年龄
    ASP.NET 与 Ajax 的实现方式
    windows下编辑器Emacs的安装与配置
    2013.10.26工作Fighting(1)
    Jquery操作下拉框(DropDownList)实现取值赋值
    js调用后台,后台调用前台等方法总结
  • 原文地址:https://www.cnblogs.com/wykCN/p/5857849.html
Copyright © 2011-2022 走看看