1. 程式人生 > >【轉】Java Collection(集合)必考面試題

【轉】Java Collection(集合)必考面試題

Arraylist 與 LinkedList 異同

  • 1. 是否保證執行緒安全: ArrayList 和 LinkedList 都是不同步的,也就是不保證執行緒安全;
  • 2. 底層資料結構: Arraylist 底層使用的是Object陣列;LinkedList 底層使用的是雙向連結串列資料結構(JDK1.6之前為迴圈連結串列,JDK1.7取消了迴圈。注意雙向連結串列和雙向迴圈連結串列的區別:); 詳細可閱讀JDK1.7-LinkedList迴圈連結串列優化
  • 3. 插入和刪除是否受元素位置的影響:ArrayList 採用陣列儲存,所以插入和刪除元素的時間複雜度受元素位置的影響。
    比如:執行add(E e)方法的時候, ArrayList 會預設在將指定的元素追加到此列表的末尾,這種情況時間複雜度就是O(1)。但是如果要在指定位置 i 插入和刪除元素的話(add(int index, E element))時間複雜度就為 O(n-i)。因為在進行上述操作的時候集合中第 i 和第 i 個元素之後的(n-i)個元素都要執行向後位/向前移一位的操作。 ② LinkedList 採用連結串列儲存,所以插入,刪除元素時間複雜度不受元素位置的影響,都是近似 O(1)而陣列為近似 O(n)。
  • 4. 是否支援快速隨機訪問: LinkedList 不支援高效的隨機元素訪問,而 ArrayList 支援。快速隨機訪問就是通過元素的序號快速獲取元素物件(對應於get(int index)
    方法)。
  • 5. 記憶體空間佔用: ArrayList的空 間浪費主要體現在在list列表的結尾會預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗比ArrayList更多的空間(因為要存放直接後繼和直接前驅以及資料)。
    @@ -251,7 +251,8 @@ synchronized只鎖定當前連結串列或紅黑二叉樹的首節點,這樣只要ha

1. List

2. Set

  • HashSet(無序,唯一): 基於 HashMap 實現的,底層採用 HashMap 來儲存元素