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

Java中Vector、ArrayList、LinkedList的關系詳細解析

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

(一)List實現(xiàn)類關系

Collection集合層級

List與Set關鍵點:

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

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

(3)Vector默認值10,擴容機制為構造函數(shù)設置自動擴容大小或者默認翻倍;ArrayList默認值為10,擴容機制為1.5倍,采用舊數(shù)組大小+舊數(shù)組大小右移1位;LinkedList無擴容機制,原因為底層存儲為Node節(jié)點。

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

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

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

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

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

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

(三)List線程安全操作類

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

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

優(yōu)缺點:

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

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

讀寫分離、寫時復制原理:

 //寫操作: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ù)組復制到新數(shù)組
           newElements[len] = e;
           setArray(newElements);//將新數(shù)組重新賦值到原數(shù)組
           return true;
       } finally {
           lock.unlock();
       }
   }
 //讀操作://因為讀操作不影響數(shù)據(jù),不需要加鎖
   //根據(jù)索引查找
   public E get(int index) {
       return get(getArray(), index);//調用封裝的get
   }
   private E get(Object[] a, int index) {
       return (E) a[index];//直接返回數(shù)據(jù)
   }

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

相關文章

  • Java實現(xiàn)滑動驗證碼(前端部分)

    Java實現(xiàn)滑動驗證碼(前端部分)

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

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

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

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

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

    如何簡單使用mybatis注解

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

    JAVA中反射機制和模塊化的深入講解

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

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

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

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

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

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

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

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

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

    springboot項目突然啟動緩慢的解決

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

最新評論