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