Vector和ArrayList的区别

本文详细对比了Java中ArrayList与Vector两种动态数组的数据结构、默认初始化长度及扩容机制,并总结了两者之间的主要区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们从Java中的数据结构的角度去分析他们的区别;

Vector和ArrayList的数据结构类型均为一维数组,而且是长度可变的一维数组。

Vector:
当我们用默认构造函数创建实例的时候:
 Vector vector = new Vector<String>();
从源码中可以看到:调用这个构造方法默认情况下创建的一组数据长度大小为10,刚才说了Vector是可变的一维数组,所以当Vector的存储容量超过10的时候会怎么呢?
②我们来看源码:

 public synchronized void ensureCapacity(int minimumCapacity) {
        if (elementData.length < minimumCapacity) {
            int next = (capacityIncrement <= 0 ? elementData.length
                    : capacityIncrement)
                    + elementData.length;
            grow(minimumCapacity > next ? minimumCapacity : next);
        }
    }
从上面的源码中我们可以看到,在Vector默认的一维数组满的时候如果我们没有指定数组增加的长度,默认情况下会增加elementData.length,也即是默认长度的一倍(即10)。

ArrayList:
①当我们用默认构造函数创建实例的时候:
ArrayList list = new ArrayList<String>();
在ArrayList的源码中我们看一下:
public ArrayList() {
            this(10);
     }
看到了吧,也是和Vector一样默认创建的以为数组的长度也是10.
②当ArrayList中的数据元素超出默认长度10的时候,会调用grow()方法,看一下源码:
ArrayList容量增加的源码:

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);
    }
在源码中这句话 int newCapacity = oldCapacity + (oldCapacity >> 1);表明ArrayList自增加的容量为默认容量的50%。

ArrayList与Vector的区别总结:

相同点:
  ①存储数据结构都是一维数组。
  ③既然是数组就具备数组的特性:它们均适合随机查找和遍历,不适合插入和删除
  ②默认情况下创建的一维数组长度均为10。

不同点:
  ①作为可变数组,在默认情况下Vector增加的长度为原始长度的1倍,ArrayList为原始长度的50%,因此ArrayList更加灵活,节约空间。
  ②Vector是同步的,是线程安全的,ArrayList是线程不安全的。
  ③基于②,ArrayList操作(增加、删除、查询元素)的速度要优于Vector。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值