1. 程式人生 > >【Java集合相關知識點的簡單總結】

【Java集合相關知識點的簡單總結】

1. 集合相關知識點
1. 集合體系概述

頂層兩大介面 CollectionMap 兩者 平級
Collection : List(有序) Set(無序) 兩個子介面 1. List : 1. ArrayList (底層是陣列) 特點 查詢快 增刪慢 執行緒不安全 2. Vector 執行緒安全 3. LinkedList(底層是雙向連結串列) 特點 查詢慢 增刪快 2. Set :
1.TreeSet 2.HashSet 特點 : 相當於自然排序 儲存無序 元素唯一 , 重寫了 HashCode .equals 3. LinkedHashSet 特點 : 存取有序 元素唯一 底層是 連結串列 + hash表
Map <K,V> : HashMap LinkedHashMap HashTable
  • 1. HashMap : 鍵值對儲存 key 值唯一 且可以為 null 執行緒不安全 初始容量 為 16
  • 2. LinkedHashMap : 有序
  • 3. HashTable : key 值不能 null value 也不能 為 null 執行緒安全
      • properties 一般在 讀取 配置檔案 用到

2. 集合的經典面試題
1. ArrayList LinkedList HashMap 的底層實現方式 ArrayList 1. ArrayList 底層是通過陣列實現 一旦我們例項化 ArrayList 無引數建構函式 預設陣列初始化長度 10 2. add() 方法 底層實現如果增加元素個數超過了 10 個 那麼 ArrayList 底層會產生一個數組 長度為原來的1.5 倍 然後將原陣列的內容 複製 到新陣列 中 當新陣列無法容納新增的元素時 重複該過程 LinkedList
1. LinkedList 底層的陣列結構是基於雙向迴圈連結串列的 且 頭結點中是不存放資料的

2. 雙向連結串列 存在的一種資料結構 ---- 節點
節點 : 實現儲存業務 前一個節點的位置資訊 後一個節點的位置資訊



HashMap 陣列 + 連結串列 根據 key 的 hash值確定 該儲存的下標位置 如果多個 Key的hash值相同 那麼這些元素會以連結串列的形式存放 新的放在鏈頭 而原來的元素放在鏈尾 2. HashMap 和 Hashtable 區別

HashMap 是 HashTable 的一個輕量級實現 (非執行緒安全的實現) 她們都完成了Map介面 主要區別在於 HashMap 允許空 (null) 鍵值(key) 由於非執行緒安全 在只有一個執行緒訪問的情況下 效率高於Hashtable
HashMap允許將 null 作為一個 entry 的key 或者 value 而 HashTable 不允許 HashMap把HashTable的 contians 方法去掉了 改成了 contiansvalue 和 contiansKey 因為 contains 方法容易讓人誤解 HashTable 繼承自 Dictionary 類 而 HashMap 是 java 1.2 引進的 Map interface 的一個實現 最大的不同是 ; Hashtable 的方法是 Synchronize 的 而 HashMap 不是 在多個執行緒訪問 Hashtable 時 不需要自己為它的方法實現同步 而 HashMap 的 必須提供外同步
1. 歷史原因 HashTable 繼承自 Dictionary 類 而 HashMap 是 java 1.2 引進的 Map interface 的一個實現 2. 同步性 : Hashtable 是執行緒安全的,也就是說是同步的,而 HashMap 是執行緒序不安全的,不是同步的   3. 值 : 只有 HashMap 可以讓你將空值 作為一個 表的條目的 key 和 value
3.HashMap的工作原理
HashMap 是基於 hashing 原理 我們通過put() 和 get() 方法儲存和獲取物件 當我們將鍵值對傳遞給 put()方法時 他呼叫鍵物件的 hashCode()方法來計算 hashCode 讓後找到 bucket 位置來 儲存值物件 當獲取物件時 通過鍵物件的 equals() 方法 找到正確的 鍵值對 然後返回 值物件 HashMap 使用連結串列來解決碰撞問題 當發生碰撞了 物件將會儲存在 連結串列的 下一個 節點中 HashMap在每個連結串列節點中儲存鍵值對物件
當兩個不同的鍵物件的 HashCode 相同時 會發生什麼 他們會儲存在同一個 bucket 位置的連結串列中 鍵物件的 equals 方法 用來找到鍵值對
4 Collection 和 Collections 的區別
Collection 是集合類的上級介面 繼承與他的介面主要有 Set 和 List Collection 是結合類的一個幫助類 他提供一系列靜態方法實現對各種 集合的搜尋。排序。執行緒安全化等操作