分析轮子(五)- Vector.java

本文对比了ArrayList与Vector两种集合类的相似之处与关键差异。两者虽然底层都采用数组实现并支持动态扩展,但在扩容策略与线程安全性方面存在显著区别。Vector通过同步机制确保线程安全,而ArrayList则提供了更高的并发性能。

注:玩的是JDK1.7版本

一: 先上类图,从类图上看和 ArrayList.java 非常相像,可查看 分析轮子(一)-ArrayList.java

二:然后看源码,发现和 ArrayList.java 各种实现上也非常的相像,他们的底层数据结构都是数组,并且都可以动态扩展,所以,不再重述了,有兴趣可以查看 分析轮子(一)-ArrayList.java

    /**
     * The array buffer into which the components of the vector are
     * stored. The capacity of the vector is the length of this array buffer,
     * and is at least large enough to contain all the vector's elements.
     *
     * <p>Any array elements following the last element in the Vector are null.
     *
     * @serial
     */
    protected Object[] elementData;

三:如此类似的类为什么需要两个呢?写JDK源码的人怎么可能犯这个错误,来看看他们的不同点吧!

1)当需要扩展空间时,ArrayList.java 增加原来的一半 Vector.java 增加原来的一倍

2)ArrayList.java 非线程安全 Vector.java 是线程安全

Vector.java 类的许多方法都使用了 synchronized 同步关键字来修饰了,代表 Vector.java 是一个线程安全的类!当然,对应的代价嘛!就是开销相对会大一些。加锁后为什么开销会大一些呢?

想像一下,你在北京天安门附近有一座四合院,大门、小门、卧室门你都上锁了,你晚上写完代码,下班后到家休息的时候,是不是要一个个获得锁,然后一个个的开锁,才能进门休息,是不是有点费事费时呢?

转载于:https://www.cnblogs.com/godtrue/p/9622964.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值