如何进行Vector源码解析

这篇文章将为大家详细讲解有关如何进行Vector源码解析,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

成都创新互联-专业网站定制、快速模板网站建设、高性价比港闸网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式港闸网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖港闸地区。费用合理售后完善,10年实体公司更值得信赖。

在Java的集合类中,除了ArrayList外,还有一些其它的集合类它们底层也是采用数组的方式实现的,例如Vector集合类。那它们在使用上或者说在底层的实现方式上有何不同的呢?接下来我们将详细来分析一下Vector集合的相关知识。

下面直接来分析Vector的底层源码,来对比一下Vector集合与ArrayList集合在底层有何不同。我们还是和ArrayList集合一样还是先看一下Vector集合的初始化,也就是构造方法。

  • 初始化

如何进行Vector源码解析

如何进行Vector源码解析

如何进行Vector源码解析

虽然上面是3个不同的构造方法,但是我们通过方法的调用关系就可得知,如果我们使用无参的构造方法来创建Vector对象时,那么上述的3个方法都会依次执行。并且我们知道上述方法中最核心的方法也就是给数组初始化的代码就是第3个构造方法。因为我们已经分析过了ArrayList中的源码,所以我们可以很容易得出以下结论:

  • Vector集合和ArrayList一样当集合第一次执行默认初始化时,会将底层数组的大小设置为10

  • Vector集合与ArrayList不同的地方就是ArrayList集合当我们使用无参构造方法创建对象时,并不会为数组执行默认初始化,第一次默认初始化动作发生在ArrayList集合第一次调用add()方法的时候。而在Vector集合中,当我们使用无参构造方法创建对象时,则会立即执行默认初始化。

下面我们分析一下Vector集合的add()方法的实现逻辑。

  • 动态分配

如何进行Vector源码解析

如何进行Vector源码解析

如何进行Vector源码解析

上述的代码貌似我们很眼熟啊有没有,没错上述的代码逻辑,其实和ArrayList源码逻辑几乎一样。唯一的区别就是Vector集合和ArrayList集合的动态分配方式不一样 。在ArrayList那篇文章中,我们已经知道了,当底层数组已经达到最大容量时,会自动创建一个比原数组大1.5倍的数组。那么在上述代码中我们发现,Vector集合的底层扩展规律是会创建一个是原数组2倍的数组来存储元素。这也就是Vector集合与ArrayList集合的区别之一。既然是区别之一,那么就一定还有其它的区别,我们发现在add()方法中添加了synchronized同步关键字,这就说明Vector集合是一个线程安全的集合类,这也是与ArrayList集合的区别之一,因为ArrayList集合并不是一个线程安全的集合类。

  • 注意事项

因为Vector集合底层也是采用数组的方式实现的,所以它的弊端基本和ArrayList集合一样 ,这里就不在做过多的介绍了。但有一点要注意,因为Vector集合是线程安全的集合类,所以我们在开发多线程时,可以直接使用而无需要添加额外的同步的代码,就可保证线程的安全。但是,如果我们开发时不是在多线程环境中运行的,如果我们继续使用Vector集合时,就会造成我们程序的性能降低,这是因为Vector集合底层使用了ynchronized同步关键字,所以每次执行add()方法时,都有频繁的执行获取锁和释放锁操作,这样就会在无形之中,影响程序的性能。所以,我们在日常的开发中,如果不是在多线程环境中使用List集合的话,那么我们推荐使用ArrayList或LinkedList集合,因为它们不是线程安全的集合类,所以也就不会频繁的执行获取锁和释放锁操作,所以相比Vector集合,程序的运行效率较高。

关于如何进行Vector源码解析就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


网站题目:如何进行Vector源码解析
网站路径:http://cdiso.cn/article/ieocie.html

其他资讯