問題問答之Map

Jdk8中hashMap有哪些改動?

7中鏈表加數組的方式,8中增加的紅黑數做數據結構  ,擴容機制,增加了

ConcurrentHashMap線程安全集合

 

Jdk8爲什麼要使用紅黑樹?

介於兩者之間,插入效率高的鏈表和查詢快的二叉樹優勢  ,而紅黑樹 插入比二叉樹高,查詢比鏈表快

 

hashMap 擴容機制是怎麼樣的,7和8的有什麼不同

8中如果對象超過了8就使用紅黑樹來存儲,沒超過就用鏈表。通過法值來控制

 

爲什麼重寫對象的equals方法 時,要重寫hashCode方法。跟hashMap有關係嗎?

對象的比較單獨用equals時,會拿不到值,因爲源碼中使用的是hash值來判斷這個對象是不是同一個對象

 

hashMap是線程安全的嗎,concurrentModificationException 如何解決?

線程不安全,用CurrentHahMap 解決了這個問題,如 remove時報錯

要注意什麼?

對象使用時,儘量用final ,  如 User user = new User();   別人也new  會拿不到值  所以 :final User user = new User();

 

         HashMap,LinkedHashMap,TreeMap都屬於Map的子接口.Map用於存儲鍵值對.鍵不可以重複,但是值可以重複

         HashMap好是根據hashCode值存儲數據.可以爲空

         LinkedHashMap也是一個HashMap.但是內部維持了一個雙向鏈表,可以保持順序,先進先出

        性能:遍歷的時候比hashMap慢.  因爲保持插入的順序要額外的開銷.  當HashMap的容量很大的時候,實際數據很少,遍歷起來就可能比LinkedHashMap慢.因爲LinkedHashMap遍歷速度只和實際數據有關,和容量無關.而HashMap和他的容量有關.

         TreeMap實現的是SortMap接口.能夠使保存的記錄根據鍵排序,默認是升序的.使用Iterator遍歷得到的結果也是排過序的

         一般情況下,我們用的最多的是HashMap  在Map中插入\刪除,定位元素.hashMap是最好的選擇.

        如果要按順序遍歷鍵.(自然或者自定義),TreeMap是最好的選擇

         如果需要輸出的順序和輸入的相同,那就使用LinkedHashMap來實現.它還可以按讀取順序來排序.

         HashTable是線程安全的一個Colletion,不允許空值的存在,這個接口已經被淘汰了.如果要用線程安全,就使用ConcurrentHashMap

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章