欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析

 更新時(shí)間:2023年11月16日 10:30:40   作者:進(jìn)擊的貓  
這篇文章主要介紹了Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析,Vector和ArrayList底層均為Object數(shù)組,LinkedList底層是Node節(jié)點(diǎn),Vector是線程安全(底層方法均添加synchronized),ArrayList、LinkedList是線程不安全(無(wú)鎖),需要的朋友可以參考下

(一)List實(shí)現(xiàn)類(lèi)關(guān)系

Collection集合層級(jí)

List與Set關(guān)鍵點(diǎn):

(1)Vector和ArrayList底層均為Object數(shù)組,LinkedList底層是Node節(jié)點(diǎn)。

(2)Vector是線程安全(底層方法均添加synchronized),ArrayList、LinkedList是線程不安全(無(wú)鎖)。

(3)Vector默認(rèn)值10,擴(kuò)容機(jī)制為構(gòu)造函數(shù)設(shè)置自動(dòng)擴(kuò)容大小或者默認(rèn)翻倍;ArrayList默認(rèn)值為10,擴(kuò)容機(jī)制為1.5倍,采用舊數(shù)組大小+舊數(shù)組大小右移1位;LinkedList無(wú)擴(kuò)容機(jī)制,原因?yàn)榈讓哟鎯?chǔ)為Node節(jié)點(diǎn)。

(4)Vector無(wú)參構(gòu)造函數(shù)直接使用默認(rèn)值10進(jìn)行初始化,ArrayList無(wú)參構(gòu)造函數(shù)未初始化,第一次add的時(shí)候進(jìn)行初始化。

(5)Vector可以指定每次擴(kuò)容大小,ArrayList不能指定每次擴(kuò)容大小,固定為1.5倍。

(二)List實(shí)現(xiàn)類(lèi)的使用場(chǎng)景

(1)Vector是線程安全,因底層方法添加了synchronized,導(dǎo)致多線程會(huì)阻塞,性能較低;

(2)ArrayList用于大量查詢(xún)和修改,因底層是數(shù)組,便于查詢(xún)和修改值。(線程不安全,單線程)

(3)LinkedList用于添加和刪除,因底層是鏈表,便于插入值和刪除值。(線程不安全,單線程)

(三)List線程安全操作類(lèi)

(1)Collections.synchronizedList方法是將底層操作均封裝了并添加了synchronized;

(2)CopyOnWriteArrayList是采用ReentrantLock實(shí)現(xiàn)線程安全,讀寫(xiě)分離,寫(xiě)時(shí)復(fù)制;

優(yōu)缺點(diǎn):

(1)Collections.synchronizedList(synchronized關(guān)鍵字實(shí)現(xiàn))寫(xiě)數(shù)據(jù)性能上優(yōu)于CopyOnWriterArrayList;

(2)CopyOnWriteArrayList(ReentrantLock實(shí)現(xiàn)讀寫(xiě)分離,寫(xiě)時(shí)復(fù)制)在讀性能上優(yōu)于Collections.synchronizedList;

讀寫(xiě)分離、寫(xiě)時(shí)復(fù)制原理:

 //寫(xiě)操作:add、remove、set等都是寫(xiě)操作,這里僅列舉add方法
  public boolean add(E e) {
       final ReentrantLock lock = this.lock;
       lock.lock();//加鎖
       try {
           Object[] elements = getArray();//獲取原數(shù)組
           int len = elements.length;
           Object[] newElements = Arrays.copyOf(elements, len + 1);//將原數(shù)組復(fù)制到新數(shù)組
           newElements[len] = e;
           setArray(newElements);//將新數(shù)組重新賦值到原數(shù)組
           return true;
       } finally {
           lock.unlock();
       }
   }
 //讀操作://因?yàn)樽x操作不影響數(shù)據(jù),不需要加鎖
   //根據(jù)索引查找
   public E get(int index) {
       return get(getArray(), index);//調(diào)用封裝的get
   }
   private E get(Object[] a, int index) {
       return (E) a[index];//直接返回?cái)?shù)據(jù)
   }

到此這篇關(guān)于Java中Vector、ArrayList、LinkedList的關(guān)系詳細(xì)解析的文章就介紹到這了,更多相關(guān)Vector、ArrayList、LinkedList的關(guān)系內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • DTD驗(yàn)證xml格式的三種方式詳解

    DTD驗(yàn)證xml格式的三種方式詳解

    這篇文章主要介紹了DTD驗(yàn)證xml格式的三種方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • spring boot的maven配置依賴(lài)詳解

    spring boot的maven配置依賴(lài)詳解

    本篇文章主要介紹了spring boot的maven配置依賴(lài)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • 如何基于spring security實(shí)現(xiàn)在線用戶統(tǒng)計(jì)

    如何基于spring security實(shí)現(xiàn)在線用戶統(tǒng)計(jì)

    這篇文章主要介紹了如何基于spring security實(shí)現(xiàn)在線用戶統(tǒng)計(jì),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Java中String和StringBuffer及StringBuilder?有什么區(qū)別

    Java中String和StringBuffer及StringBuilder?有什么區(qū)別

    這篇文章主要介紹了Java中String和StringBuffer及StringBuilder?有什么區(qū)別,String?是?Java?語(yǔ)言非?;A(chǔ)和重要的類(lèi),更多相關(guān)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • Java類(lèi)型通配符應(yīng)用實(shí)戰(zhàn)分析

    Java類(lèi)型通配符應(yīng)用實(shí)戰(zhàn)分析

    這篇文章主要介紹了Java類(lèi)型通配符應(yīng)用實(shí)戰(zhàn),簡(jiǎn)單分析了Java類(lèi)型通配符概念、原理并結(jié)合實(shí)例形式給出了Java類(lèi)型通配符相關(guān)使用技巧,需要的朋友可以參考下
    2019-07-07
  • 在SpringBoot中使用Logback管理記錄日志

    在SpringBoot中使用Logback管理記錄日志

    本篇文章主要介紹了在SpringBoot中使用Logback管理記錄日志,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • Redis使用RedisTemplate模板類(lèi)的常用操作方式

    Redis使用RedisTemplate模板類(lèi)的常用操作方式

    這篇文章主要介紹了Redis使用RedisTemplate模板類(lèi)的常用操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn)

    本文主要介紹了SpringBoot配置連接兩個(gè)或多個(gè)數(shù)據(jù)庫(kù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • Java基礎(chǔ)之super關(guān)鍵字淺析

    Java基礎(chǔ)之super關(guān)鍵字淺析

    java中的super關(guān)鍵字是一個(gè)引用變量,用于引用直接父類(lèi)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)之super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • java搭建一個(gè)Socket服務(wù)器響應(yīng)多用戶訪問(wèn)

    java搭建一個(gè)Socket服務(wù)器響應(yīng)多用戶訪問(wèn)

    本篇文章主要介紹了java搭建一個(gè)Socket服務(wù)器響應(yīng)多用戶訪問(wèn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02

最新評(píng)論