日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java集合之Vector源码分析

發布時間:2024/8/23 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java集合之Vector源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

概述

Vector與ArrayLIst類似, 內部同樣維護一個數組, Vector是線程安全的. 方法與ArrayList大體一致, 只是加上 synchronized 關鍵字, 保證線程安全, 下面就不具體分析源碼了, 具體可以查看ArrayList中的源碼分析.

Vector源碼分析

1.主要字段

?

2.構造函數

?

?

3.增刪改查

?

其他方法大部分類似, 不再贅述, 下面看下擴容機制的函數:

?

?

Vector與ArrayList的區別

  • Vector是線程安全的, ArrayList不是線程安全的, 這是最主要的
  • ArrayList不可以設置擴展的容量, 默認1.5倍; Vector可以設置, 默認2倍
  • 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 部分源碼:

    ?

    ?

    ?

    ?

    ?

    從代碼中, 我們可以看出:

  • Vector使用同步方法實現, synchronizedList使用同步代碼塊實現
  • 兩者的擴容數組容量方式不一樣(兩者在擴容方面的差別就是ArrayList和Vector的差別)
  • 但是, SynchronizedList中 listlterator方法并沒有做同步處理, 但是在Vector卻對該方法加了方法鎖. 所以, 在使用SynchronizedList進行遍歷的時候要手動加鎖.

    ?

    但是之后的但是, 如果想要把LinkedList變成線程安全的, 那么我們可以將已有的LinkedList直接轉成SynchronizedList, 而不用改變它的底層數據結構, 這一點是Vector無法做到的, 因為Vector底層結構是使用數組的, 這一點是無法更改的.

    總結兩者區別如下:

  • SynchronizedList有很好的擴展和兼容功能, 可以將所有的List子類轉成線程安全的類
  • 使用SynchronizedList在遍歷的時候要手動進行同步處理
  • SynchronizedList可以指定鎖對象
  • 總結

    以上是生活随笔為你收集整理的Java集合之Vector源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。