亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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是線程不安全(無鎖),需要的朋友可以參考下

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

Collection集合層級

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

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

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

(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無擴(kuò)容機(jī)制,原因?yàn)榈讓哟鎯?chǔ)為Node節(jié)點(diǎn)。

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

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

(二)List實(shí)現(xiàn)類的使用場景

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

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

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

(三)List線程安全操作類

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

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

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

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

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

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

 //寫操作:add、remove、set等都是寫操作,這里僅列舉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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼(前端部分)

    Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼(前端部分)

    這篇文章主要為大家介紹了如何用Java語言實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的生成(前端部分),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下
    2022-10-10
  • java?List集合去除null的4種方法

    java?List集合去除null的4種方法

    這篇文章主要給大家介紹了java?List集合去除null的3種方法,文中通過代碼示例將每種方法都介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • Windows7下的Java運(yùn)行環(huán)境搭建過程圖解

    Windows7下的Java運(yùn)行環(huán)境搭建過程圖解

    這篇文章主要介紹了Windows7下的Java運(yùn)行環(huán)境搭建過程圖解,需要的朋友可以參考下
    2014-04-04
  • 如何簡單使用mybatis注解

    如何簡單使用mybatis注解

    之前我們介紹了使用JDBC或者java框架mabatis來實(shí)現(xiàn)對數(shù)據(jù)庫的操作,現(xiàn)在為了簡化代碼,提高程序的簡潔性,我們探索如何使用注解進(jìn)行開發(fā),需要的朋友可以參考下
    2021-06-06
  • JAVA中反射機(jī)制和模塊化的深入講解

    JAVA中反射機(jī)制和模塊化的深入講解

    很多剛學(xué)Java反射的同學(xué)可能對反射技術(shù)一頭霧水,為什么要學(xué)習(xí)反射,學(xué)習(xí)反射有什么作用,下面這篇文章主要給大家介紹了關(guān)于JAVA中反射機(jī)制和模塊化的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • Java HashMap源碼及并發(fā)環(huán)境常見問題解決

    Java HashMap源碼及并發(fā)環(huán)境常見問題解決

    這篇文章主要介紹了Java HashMap源碼及并發(fā)環(huán)境常見問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • mybaits-plus?lambdaQuery()?和?lambdaUpdate()?常見的使用方法

    mybaits-plus?lambdaQuery()?和?lambdaUpdate()?常見的使用方法

    MyBatis-Plus是一個(gè)?MyBatis?(opens?new?window)的增強(qiáng)工具,在?MyBatis?的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,這篇文章主要介紹了mybaits-plus?lambdaQuery()?和?lambdaUpdate()?比較常見的使用方法,需要的朋友可以參考下
    2023-01-01
  • Java如果通過jdbc操作連接oracle數(shù)據(jù)庫

    Java如果通過jdbc操作連接oracle數(shù)據(jù)庫

    這篇文章主要介紹了Java如果通過jdbc操作連接oracle數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java前端開發(fā)之HttpServletRequest的使用

    Java前端開發(fā)之HttpServletRequest的使用

    service方法中的request的類型是ServletRequest,而doGet/doPost方法的request的類型是HttpServletRequest,HttpServletRequest是ServletRequest的子接口,功能和方法更加強(qiáng)大
    2023-01-01
  • springboot項(xiàng)目突然啟動(dòng)緩慢的解決

    springboot項(xiàng)目突然啟動(dòng)緩慢的解決

    這篇文章主要介紹了springboot項(xiàng)目突然啟動(dòng)緩慢的解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論