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等处理,该类是非并发安全的类,在并发中应该由开发人员自行控制并发的安全性,或者使用并发安全的集合类替换。

转载于:https://www.cnblogs.com/wykCN/p/5857849.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值