JAVA集合2-Vector

Vector 底层分析

Vector 是 Java 中的一个线程安全的动态数组实现,也是实现于 List 接口,底层数据结构与 ArrayList 相似,也是一个动态数组存放数据。在 add() 方法的时候使用 synchronized 进行同步写数据,但是开销较大,所以 Vector 是一个同步容器并不是一个并发容器,但在设计上考虑了线程安全性。下面是 Vector 的基本底层分析:

数据结构

  • Vector 内部同样使用数组来存储元素。

  • 初始时,Vector 的默认容量,当元素数量超过当前容量时,会自动进行扩容操作。与 ArrayList 不同的是,Vector 的扩容策略会略有不同。

数组操作

  • 添加、获取、设置和删除元素的操作与 ArrayList 类似,但在实现时考虑了线程安全性。
  • Vector 在添加、删除、扩容等操作时会使用 synchronized 关键字来保证线程安全。

add() 方法:

    public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }

指定位置插入数据:

    public void add(int index, E element) {
        insertElementAt(element, index);
    }
    public synchronized void insertElementAt(E obj, int index) {
        modCount++;
        if (index > elementCount) {
            throw new ArrayIndexOutOfBoundsException(index
                                                     + " > " + elementCount);
        }
        ensureCapacityHelper(elementCount + 1);
        System.arraycopy(elementData, index, elementData, index + 1, elementCount - index);
        elementData[index] = obj;
        elementCount++;
    }

性能分析

  • 由于 Vector 的方法都是同步的,因此在多线程环境下,可能会导致性能下降。因此,它在单线程环境下的性能可能比 ArrayList 差。
  • ArrayList 相比,Vector 在添加、删除元素时的性能开销更大,因为它需要在操作时获取锁来保证线程安全性。
  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值