對java中arraylist深入理解

來源:互聯網
上載者:User

標籤:rar   tar   估計   超過   移動   插入   長度   堆棧   用兩個   

1、ArrayList插入刪除一定慢嗎?

取決於你刪除的元素離數組末端有多遠,ArrayList拿來作為堆棧來用還是挺合適的,push和pop操作完全不涉及資料移動操作。

2、ArrayList的遍曆和LinkedList遍曆效能比較如何?

論遍曆ArrayList要比LinkedList快得多,ArrayList遍曆最大的優勢在於記憶體的連續性,CPU的內部緩衝結構會緩衝連續的記憶體片段,可以大幅降低讀取記憶體的效能開銷。

3、ArrayList是如何擴容的?

ArrayList擴容後的大小等於擴容前大小的1.5倍,當ArrayList很大的時候,這樣擴容還是挺浪費空間的,甚至會導致記憶體不足拋出OutOfMemoryError。擴容的時候還需要對數組進行拷貝,這個也挺費時的。所以我們使用的時候要竭力避免擴容,提供一個初始估計容量參數,以免擴容對效能帶來較大影響。

4、ArrayList的預設數組大小為什麼是10?

其實小編也沒找到具體原因。據說是因為sun的程式員對一系列廣泛使用的程式碼進行了調研,結果就是10這個長度的數組是最常用的最有效率的。也有說就是隨便起的一個數字,8個12個都沒什麼區別,只是因為10這個數組比較的圓滿而已。

5、ArrayList是安全執行緒的嗎?

當然不是,安全執行緒版本的數組容器是Vector。Vector的實現很簡單,就是把所有的方法統統加上synchronized就完事了。你也可以不使用Vector,用Collections.synchronizedList把一個普通ArrayList封裝成一個安全執行緒版本的數組容器也可以,原理同Vector是一樣的,就是給所有的方法套上一層synchronized。

6、數組用來做隊列合適嗎?

數組是非常適合做隊列的。比如ArrayBlockingQueue內部實現就是一個環形隊列,它是一個定長隊列,內部是用一個定長數組來實現的。另外著名的Disruptor開源Library也是用環形數組來實現的超高效能隊列,具體原理不做解釋,比較複雜。簡單點說就是使用兩個位移量來標記數組的讀位置和寫位置,如果超過長度就折回到數組開頭,前提是它們是定長數組。

7、arraylist適合做隊列嗎?

ArrayList固然不適合做隊列。因為隊列一般是FIFO的,如果用ArrayList做隊列,就需要在數組尾部追加資料,數組頭部刪除數組,反過來也可以。但是無論如何總會有一個操作會涉及到數組的資料搬遷,這個是比較耗費效能的。

 

本文轉自:https://www.toutiao.com/i6506647221109260807/

對java中arraylist深入理解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.