ArrayList源码分析

  • 比较ArrayList、LinkedList、Vector的异同:
  • 同:
  •  三个类都实现了List接口,存储的数据都是有序可重复的数据。
    
  • 异:
  •  ArrayList:作为List接口的主要实现类,线程不安全,效率高:使用Object【】存储.elementData存储
    
  •   LinkedList:对于频繁的插入、删除操作,使用此类效率比ArrayList效率高:底层使用的双向链表存储
    
  •   Vector:作为List接口的一个古老实现类,线程安全,效率低.使用Object【】存储elementData存储
    
  • ArrayList的源码分析:jdk7的源码分析:
  •      ArrayList list=new ArrayList();//底层创建了长度为10的Objecct【】数组ElementData
    
  •      list.add(123); //elementData[0]=new Interger(123);
    
  •      ```
    
  •      list.add(11);//如果此次的添加导致了底层elementData数组容量不够,则扩容
    
  •      默认情况下,扩容为原来的1.5倍,同时需要将原有数组中的数据复制到新的数组中。
    
  •  结论:
    
  •      建议开发中使用带参的构造器:ArrayList list=new ArrayList(int capacity)
    

*ArrayList的源码分析:jdk8的源码分析:

  •      ArrayList list=new ArrayList();//底层Objecct【】elementData初始化为【】,并没有创建长度
    
  •      list.add(123);//第一次调用add()时,底层才创建了长度10的数组,并将数据123添加到elementData
    
  •      后续添加与扩容与jdk7无异
    

*小结: jdk7中的ArrayList对象创建类似于单例中的饿汉式,而jdk8中的ArrayList的对象的创建类似于单例的懒汉式,

  • 延迟了数组的创建,节省了内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值