加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java集合之Vector源码分析

发布时间:2020-12-14 06:40:31 所属栏目:Java 来源:网络整理
导读:概述 Vector与ArrayLIst类似,内部同样维护一个数组,Vector是线程安全的. 方法与ArrayList大体一致,只是加上 synchronized 关键字,保证线程安全,下面就不具体分析源码了,具体可以查看ArrayList中的源码分析. Vector源码分析 1.主要字段 2.构造函数 3.增删改查

概述

Vector与ArrayLIst类似,内部同样维护一个数组,Vector是线程安全的. 方法与ArrayList大体一致,只是加上 synchronized 关键字,保证线程安全,下面就不具体分析源码了,具体可以查看ArrayList中的源码分析.

Vector源码分析

1.主要字段

Java集合之Vector

2.构造函数

Java集合之Vector

Java集合之Vector

3.增删改查

Java集合之Vector

其他方法大部分类似,不再赘述,下面看下扩容机制的函数:

Java集合之Vector

Java集合之Vector

Vector与ArrayList的区别

  1. Vector是线程安全的,ArrayList不是线程安全的,这是最主要的
  2. ArrayList不可以设置扩展的容量,默认1.5倍; Vector可以设置,默认2倍
  3. ArrayList无参构造函数中初始量为0; Vector的无参构造函数初始容量为10

Vector与Collections.synchronizedList

Vector是java.util包中的一个类。 SynchronizedList是java.util.Collections中的一个静态内部类。

在多线程的场景中可以直接使用Vector类,也可以使用Collections.synchronizedList(List list)方法来返回一个线程安全的List。

那么,到底SynchronizedList和Vector有没有区别,为什么java api要提供这两种线程安全的List的实现方式呢?

以下看 synchronizedList 部分源码:

Java集合之Vector

Java集合之Vector

Java集合之Vector

Java集合之Vector

Java集合之Vector

从代码中,我们可以看出:

  1. Vector使用同步方法实现,synchronizedList使用同步代码块实现
  2. 两者的扩容数组容量方式不一样(两者在扩容方面的差别就是ArrayList和Vector的差别)

但是,SynchronizedList中 listlterator方法并没有做同步处理,但是在Vector却对该方法加了方法锁. 所以,在使用SynchronizedList进行遍历的时候要手动加锁.

Java集合之Vector

但是之后的但是,如果想要把LinkedList变成线程安全的,那么我们可以将已有的LinkedList直接转成SynchronizedList,而不用改变它的底层数据结构,这一点是Vector无法做到的,因为Vector底层结构是使用数组的,这一点是无法更改的.

总结两者区别如下:

  1. SynchronizedList有很好的扩展和兼容功能,可以将所有的List子类转成线程安全的类
  2. 使用SynchronizedList在遍历的时候要手动进行同步处理
  3. SynchronizedList可以指定锁对象

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读