最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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集合層級(jí)

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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡單闡述一下Java集合的概要

    簡單闡述一下Java集合的概要

    今天給大家?guī)淼奈恼率顷P(guān)于Java的相關(guān)知識(shí),文章圍繞著Java集合的概要展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Java多線程之線程安全問題詳情

    Java多線程之線程安全問題詳情

    這篇文章主要介紹了Java多線程之線程安全問題詳情,線程安全問題是指因多線程搶占式執(zhí)行而導(dǎo)致程序出現(xiàn)bug的問題。內(nèi)容介紹詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-06-06
  • SpringBoot對(duì)靜態(tài)資源的映射規(guī)則詳解解讀

    SpringBoot對(duì)靜態(tài)資源的映射規(guī)則詳解解讀

    這篇文章主要介紹了SpringBoot對(duì)靜態(tài)資源的映射規(guī)則詳解解讀,在Spring Boot中,映射規(guī)則是用來定義URL與控制器方法之間的映射關(guān)系的,通過映射規(guī)則,可以將特定的URL請(qǐng)求映射到相應(yīng)的控制器方法上,從而實(shí)現(xiàn)請(qǐng)求的處理和響應(yīng)的返回,需要的朋友可以參考下
    2023-10-10
  • springboot動(dòng)態(tài)切換數(shù)據(jù)庫表方式

    springboot動(dòng)態(tài)切換數(shù)據(jù)庫表方式

    本文分享了使用TableScopeAspectAjk切面和TableScopeAjk注解實(shí)現(xiàn)數(shù)據(jù)庫表配置、業(yè)務(wù)切入點(diǎn)管理及SQL動(dòng)態(tài)配置的經(jīng)驗(yàn),旨在提升代碼可維護(hù)性與靈活性,適用于業(yè)務(wù)邏輯與數(shù)據(jù)層的分離開發(fā)
    2025-08-08
  • java之AQS(AbstractQueuedSynchronizer)用法解讀

    java之AQS(AbstractQueuedSynchronizer)用法解讀

    AQS是Java并發(fā)包中的核心組件,用于構(gòu)建鎖和其他同步器,它通過同步狀態(tài)管理和FIFO隊(duì)列實(shí)現(xiàn)線程的排隊(duì)和喚醒機(jī)制,AQS支持獨(dú)占和共享兩種資源共享方式,并廣泛應(yīng)用于各種同步器的實(shí)現(xiàn)中
    2026-01-01
  • Spring鉤子接口匯總分析使用示例

    Spring鉤子接口匯總分析使用示例

    Spring提供了非常多的擴(kuò)展接口,官方將這些接口稱之為鉤子,這些鉤子會(huì)在特定的時(shí)間被回調(diào),以此來增強(qiáng)Spring功能,眾多優(yōu)秀的框架也是通過擴(kuò)展這些接口,來實(shí)現(xiàn)自身特定的功能,如SpringBoot、mybatis等
    2023-01-01
  • Java編程讀寫鎖詳解

    Java編程讀寫鎖詳解

    本篇文章給大家詳細(xì)分享了Java編程讀寫鎖的相關(guān)原理以及知識(shí)點(diǎn)內(nèi)容,有興趣的朋友們可以參考下。
    2018-08-08
  • 解決tomcat啟動(dòng)時(shí)報(bào)Junit相關(guān)錯(cuò)誤java.lang.ClassNotFoundException: org.junit.Test問題

    解決tomcat啟動(dòng)時(shí)報(bào)Junit相關(guān)錯(cuò)誤java.lang.ClassNotFoundException: 

    這篇文章主要介紹了解決tomcat啟動(dòng)時(shí)報(bào)Junit相關(guān)錯(cuò)誤java.lang.ClassNotFoundException: org.junit.Test問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • JVM字符串常量池StringTable的具體使用

    JVM字符串常量池StringTable的具體使用

    字符串常量池是JVM中的一個(gè)重要結(jié)構(gòu),用于存儲(chǔ)JVM運(yùn)行時(shí)產(chǎn)生的字符串,本文主要介紹了JVM字符串常量池StringTable的具體使用,感興趣的可以了解一下
    2024-04-04
  • 解決springboot報(bào)錯(cuò)Failed?to?parse?multipart?servlet?request;?nested?exception?is?java.io.IOException問題

    解決springboot報(bào)錯(cuò)Failed?to?parse?multipart?servlet?request

    在使用SpringBoot開發(fā)時(shí),通過Postman發(fā)送POST請(qǐng)求,可能會(huì)遇到因臨時(shí)目錄不存在而導(dǎo)致的MultipartException異常,這通常是因?yàn)镺S系統(tǒng)(如CentOS)定期刪除/tmp目錄下的臨時(shí)文件,解決方案包括重啟項(xiàng)目
    2024-10-10

最新評(píng)論

新竹县| 雅江县| 汽车| 金寨县| 开远市| 建始县| 肃宁县| 北票市| 濮阳市| 大庆市| 安阳县| 奇台县| 宁远县| 维西| 法库县| 延寿县| 万全县| 洛扎县| 涟源市| 怀远县| 汪清县| 新丰县| 西宁市| 保靖县| 达日县| 永德县| 临邑县| 高清| 上杭县| 奉新县| 高碑店市| 黔南| 县级市| 定日县| 莱阳市| 鄯善县| 九台市| 长泰县| 通海县| 浦东新区| 清丰县|