源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

java ArrayList和Vector的区别详解

  • 时间:2020-06-25 18:20 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:java ArrayList和Vector的区别详解
[b] ArrayList和Vector的区别[/b] [b]相同点:[/b] 1、ArrayList和Vector都是继承了相同的父类和实现了相同的接口 2、底层都是数组实现的 3、初始默认长度都为10。 [b]不同点:[/b] 1、同步性: Vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即是Vector线程安全,ArrayList线程不安全。 2、扩容不同 内部属性不同,这可能是导致扩容方式不同的原因所在。 ArrayList有两个属性,存储数据的数组elementData,和存储记录数目的size。 Vector有三个属性,存储数据的数组elementData,存储记录数目的elementCount,还有扩展数组大小的扩展因子capacityIncrement。 [b]ArrayList的扩展方法[/b]
//jdk1.8.0_91
private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
      newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
      newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
  }
可以看出,在满足扩容条件时,扩展后数组大小为原数组长度的1.5倍与传递参数中较大者 [b]Vector的扩展方法[/b]
//jdk1.8.0_91
private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
                     capacityIncrement : oldCapacity);
    if (newCapacity - minCapacity < 0)
      newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
      newCapacity = hugeCapacity(minCapacity);
    elementData = Arrays.copyOf(elementData, newCapacity);
  }
可以看出,当扩容因子大于0时,新数组长度为原数组长度+扩容因子,否则子新数组长度为原数组长度的2倍。 将上面生成的新数组长度与传递的参数长度作比较,较大者为最终的新长度。 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部