標籤: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深入理解