bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

四、ArrayList底層源碼詳解-創新互聯

文章目錄
  • 特點
  • 底層源碼分析
    • 創建
      • 無參構造器
      • 有參構造器
      • 傳入集合的有參構造器
    • 擴容
    • 注意new ArrayList(0)

菜鳥教程ArrayList講解

成都創新互聯于2013年創立,是專業互聯網技術服務公司,擁有項目成都網站設計、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元江津做網站,已為上家服務,為江津各地企業和個人服務,聯系電話:18980820575特點
  • 可以加入控制null(可加入多個)
  • 底層是數組實現的
  • ArrayList基本等同于Vector,除了ArrayList是線程不安全(執行效率高)看源碼(沒有synchronized),在多線程情況下,不建議使用ArrayList
  • ArrayList中維護了一個0bject類型的數組elementData
  • 當創建ArrayList對象時,如果使用的是無參構造器,則初始elementData容量為0,第1次添加,則擴容elementData為10,如需要再次擴容,則擴容elementData為1.5倍。
  • 如果使用的是指定大小的構造器,則初始elementData容量為指定大小,如果需要擴容,則直接擴容elementData為1.5倍。
底層源碼分析 創建 無參構造器

ArrayList list = new ArrayList();底層的實現方式
在這里插入圖片描述

有參構造器

ArrayList list = new ArrayList(8);底層實現
在這里插入圖片描述

傳入集合的有參構造器

在這里插入圖片描述

  • elementData = c.toArray():將c對象轉換成數組賦值給elementData
  • 然后判斷內容是否為空,為空的話就直接賦值一個空數組
  • 不為空的話需要判斷elementData是不是一個Object[].class,(因為c.toArray()是轉換成數組賦值給elementData,而elementData里面添加的元素都是以Object[].class添加進去的),所以如果不是Object[].class類就轉換成Object[].class類。

也就說明,無參構造器,一開始得到的集合是空的

擴容

list.add(new Book(“紅樓夢”,30,“曹雪芹”));底層的實現

  1. 首先走到這里在這里插入圖片描述

    • E e:表示添加數據時傳進來的數據
    • ensureCapacityInternal(size + 1):判斷是否需要擴容(無參構造器一開始未初始化size,java中默認為0)
    • elementData[size++] = e:add是在最后添加數據
  2. 然后再進入ensureCapacityInternal(size + 1)判斷是否需要擴容在這里插入圖片描述

  3. 進入calculateCapacity(Object[] elementData, int minCapacity)確定擴容的容量在這里插入圖片描述

    • DEFAULTCAPACITY_EMPTY_ELEMENTDATA:空數組
    • DEFAULT_CAPACITY常量10
    • minCapacity:數組添加完這個數據時的容量
  4. 再進入這個方法,確定添加數據

    • modCount:記錄添加次數(防止多線程同時修改)
    • if (minCapacity - elementData.length >0):判斷當前內容和數組容量大小,如果數組容量夠就沒必要擴容
  5. 最后才進行擴容在這里插入圖片描述

注意new ArrayList(0)

若有參構造時,傳的數據是0,那么,擴容還是會按照0擴容,不會按照無參時考慮是否大于10,來擴容。即擴容后elementData數組容量依次為0、newCapacity=1、newCapacity=2、newCapacity=(2+2/2)=3、newCapacity=(3+3/2)=4,newCapacity=(4+4/2)=6,即第六次添加數據不擴容,第七次添加還用擴容…

你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧

網頁題目:四、ArrayList底層源碼詳解-創新互聯
本文地址:http://vcdvsql.cn/article10/cdeego.html

成都網站建設公司_創新互聯,為您提供品牌網站設計微信公眾號做網站關鍵詞優化網頁設計公司建站公司

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

成都定制網站網頁設計