Vector和ArrayList区别

VectorArrayList都是Java语言中用于存储动态数组的类,它们都实现了List接口。尽管它们非常相似,但在某些方面存在一些关键的区别:

1. 同步性

Vector是同步的,也就是线程安全的。这意味着任何时刻只有一个线程能够访问Vector的实例,这适合在多线程环境中使用。
ArrayList不是同步的,也就是非线程安全的。它比Vector更适用于单线程环境,因为它的操作更快。

2. 性能:

由于Vector是同步的,它在添加、删除和检查元素等操作上通常比ArrayList慢,因为同步带来了额外的性能开销。
ArrayList由于不需要考虑线程同步,通常在执行这些操作时比Vector快。

3. 扩展

Vector默认情况下会扩展其容量的100%,而ArrayList默认情况下会扩展其容量的50%。这意味着在大量数据操作时,ArrayList可能会更加节省内存。

4.迭代

Vector使用Enumerator进行迭代,而ArrayList使用IteratorIterator允许在迭代过程中删除元素,而Enumerator则不允许。

5. 构造函数

ArrayList构造函数:

public ArrayList(int initialCapacity) {
        if (initialCapacity > 0) {
            this.elementData = new Object[initialCapacity];
            //大于0则直接创建数组
        } else if (initialCapacity == 0) {
            this.elementData = EMPTY_ELEMENTDATA;
            //创建一个空数组
        } else {
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
            //小于0则抛出异常
        }
    }

   public ArrayList() {
        this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
           //创建一个空数组
    }

可以看到无参构造创建了一个空数组复制给了elementData,这个在后续add()方法才会创建数组。而有参构造就直接创建了数组赋值给elementData.具体可以看ArrayList源码分析这篇文章。

Vector构造函数

public Vector(int initialCapacity, int capacityIncrement) {
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
    }
    
public Vector(int initialCapacity) {
       this(initialCapacity, 0);
}

 public Vector() {
       this(10);
 }

可以看到Vector无论用有参构造还是无参构造,在创建的时候就已经创建了好了数组。

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值