欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java ArrayList和Vector的区别详解

程序员文章站 2024-03-11 20:35:55
 arraylist和vector的区别 相同点: 1、arraylist和vector都是继承了相同的父类和实现了相同的接口 2、底层都是数组实现的 3...

 arraylist和vector的区别

相同点:

1、arraylist和vector都是继承了相同的父类和实现了相同的接口

2、底层都是数组实现的

3、初始默认长度都为10。

不同点:

1、同步性:

vector中的public方法多数添加了synchronized关键字,以确保方法同步,也即是vector线程安全,arraylist线程不安全。

2、扩容不同

内部属性不同,这可能是导致扩容方式不同的原因所在。

arraylist有两个属性,存储数据的数组elementdata,和存储记录数目的size。

vector有三个属性,存储数据的数组elementdata,存储记录数目的elementcount,还有扩展数组大小的扩展因子capacityincrement。

arraylist的扩展方法

//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倍与传递参数中较大者

vector的扩展方法

//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倍。 将上面生成的新数组长度与传递的参数长度作比较,较大者为最终的新长度。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!