還原真像:ArrayList性能幾乎完美,100萬數據測試

背景

程序員面試題中經常遇到ArrayList與LinkedList區別,現實的測試情況肯定沒多少人清楚。

還原真像:ArrayList性能幾乎完美,100萬數據測試

理論是這樣,現實測試情況很打臉啊。

學習目標

  • 搞清楚JDK1.8種ArrayList與LinkedList的性能情況

代碼例子

環境準備:java jdk1.8版本,100萬數據量,臺式機8G內存、雙核【速度很快哦】

注意測試結果,跟硬件配置關係很大,返回時間都是毫秒

程序員注意啦:NUM是100萬,

還原真像:ArrayList性能幾乎完美,100萬數據測試

還原真像:ArrayList性能幾乎完美,100萬數據測試

測試結果

批量循環100萬次添加元素,ArrayList、LinkedList的表現

  • 【尾部加元素】,性能都是差不多的。
  • 【首部加元素】,LinkedList就完虐ArrayList了
還原真像:ArrayList性能幾乎完美,100萬數據測試

為啥首部加元素ArrayList慢了?

原因就是多瞭如下代碼,

還原真像:ArrayList性能幾乎完美,100萬數據測試

源碼說明,如下。

還原真像:ArrayList性能幾乎完美,100萬數據測試

ArrayList的尾部添加元素,就比首部添加元素少個COPY操作。

還原真像:ArrayList性能幾乎完美,100萬數據測試

單個元素添加

性能沒顯著差異

ArrayList首部添加一個元素,性能消耗也非常小的。

核心測試代碼

arrayList.add(0,

new Content("11111", "程序汪汪",2,"2018-03-16"));

linkedList.add(new Content("11111", "程序汪汪",2,"2018-03-16"));

還原真像:ArrayList性能幾乎完美,100萬數據測試

隨機獲取

性能沒顯著差異

核心測試代碼

arrayList.get(555555);

linkedList.get(555555);

還原真像:ArrayList性能幾乎完美,100萬數據測試

單個刪除

性能沒顯著差異

核心測試代碼

arrayList.remove(arrayList.get(555555));

linkedList.remove(555555);

還原真像:ArrayList性能幾乎完美,100萬數據測試

總結

  • 除了在批量首部添加元素ArrayList性能差,其他情況都非常強勁啊。
  • 放心的用ArrayList吧,我這可是100萬數據量,平時那點數據量性能消耗就更小了。

又get到新知識的,請關注啊


分享到:


相關文章: