国产一区二区精品-国产一区二区精品久-国产一区二区精品久久-国产一区二区精品久久91-免费毛片播放-免费毛片基地

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Java中Vector和SynchronizedList的區別?

Java中Vector和SynchronizedList的區別?

來源:千鋒教育
發布人:xqq
時間: 2023-10-11 17:52:44 1697017964

一、Java中Vector和SynchronizedList的區別

有了Vector為什么還要有SynchronizedList
這個問題的答案是從 StackOverflow 中找到的。
在 JDK 1.2 之前,Collections是獨立類庫,不是 JDK/JRE 中的一部分。當時synchronized性能特別差,很多場景不需要使用同步方式,所以,獨立類庫的開發者刪除了同步操作,這個應該就是ArrayList的前身。但是,少部分場景還是需要使用同步,于是就有了SynchronizedList,一個可以包裝所有List子類的包裝類,這個類在幾乎所有方法上都加上了synchronized同步,這個設計與Vector相似。
古人說“文人相輕”,其實在編碼界也是有鄙視鏈的。在這里就是:雖然我的設計和你的設計類似,但是我的設計就是比你的好。不過,Collections確實設計更優。

一個SynchronizedList實現所有List的同步

SynchronizedList定位是包裝類,可以包裝所有List的子類。也就是說,無論是ArrayList還是LinkedList都能過實現同步,完全不會修改底層數據結構,既實現的同步,又保留了底層接口的優點。比如LinkedList的插入、刪除效率,ArrayList的順序讀取。而且,一個包裝類就解決所有List子類的同步需求,完全不需要重復實現一遍。
相對而言,Vector就比較霸道了,任何想要同步的隊列,都需要轉換為Vector的數組結構。大家都知道,數組存儲需要連續空間,順序讀取效率表現優異,但是插入和刪除效率就比較差了。

總結

Vector內部結構是數組,與Collections.synchronizedList(new ArrayList())類似。Vector可以指定擴容大小,默認是擴容到原數組長度的 2 倍;ArrayList不能指定擴容大小,直接擴容到原數組大小的 1.5 倍。SynchronizedList是一個包裝類,可以將List子類都包裝為同步隊列,從非線程安全隊列轉為線程安全隊列,沒有性能延遲,直接包裝即可;Vector是一個基于數組的同步隊列,其他隊列想要轉換為Vector,需要有數據拷貝。SynchronizedList的迭代器沒有做同步,需要用戶自己實現;Vector的迭代器做好了同步,開發人員不需要關心同步。Vector至今未標記Deprecated,而且隨著 JDK 發布,也在更新實現。雖然 JDK 承諾兼容,但是一直沒有標記過期,其用意不得而知。

延伸閱讀:

二、什么是default方法

Java 8 發布以后,可以給接口添加新方法,但是,接口仍然可以和它的實現類保持兼容。這非常重要,因為你開發的類庫可能正在被多個開發者廣泛的使用著。而Java 8之前,在類庫中發布了一個接口以后,如果在接口中添加一個新方法,那些實現了這個接口的應用使用新版本的接口就會有崩潰的危險。

有了Java 8,是不是就沒有這種危險了?答案是否定的。

給接口添加default方法可能會讓某些實現類不可用。

讓我們看下default方法的細節。

在Java 8中,接口中的方法可以被實現(Java8中的static的方法也可以在接口中實現,但這是另一個話題)。接口中被實現的方法叫做default方法,用關鍵字default作為修飾符來標識。當一個類實現一個接口的時候,它可以實現已經在接口中被實現過的方法,但這不是必須的。這個類會繼承default方法。這就是為什么當接口發生改變的時候,實現類不需要做改動的原因。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT