一、什麼是HashMap
HashMap是Java中常用的一種數據結構,它提供了基於鍵值對(key-value)存儲的功能。在HashMap中,每個鍵值對被包含在一個Entry(條目)對象中,並且可以根據鍵快速的查找到對應的值。HashMap的實現原理是基於散列表(Hash Table),通過哈希演算法計算鍵的散列碼,然後將Entry對象存儲在數組中。在存儲和查找數據時,通過散列碼和數組下標可以快速定位到Entry對象,實現了常數時間的插入和查找。
二、HashMap的特點
1. HashMap是一種無序的集合,它不保證插入順序和訪問順序一致。
2. HashMap允許key和value都為null。
3. HashMap是非線程安全的數據結構,如果多個線程同時訪問HashMap,可能會導致數據的不一致。
4. HashMap的初次容量為16,負載因子為0.75。
5. HashMap的底層是一個哈希表,由數組和鏈表組成。它的數組長度始終為2的次冪,這是因為在計算數組下標時,HashMap使用了&運算符,而如果長度是2的次冪,在計算時就相當於對數組長度取模,效率更高。
三、HashMap的有序性
HashMap本身是無序的,但是在Java 8及以上版本中,它提供了一種新的構造方法,可以創建一個具有固定順序的HashMap。該構造方法採用一個Float類型的參數來指定負載因子,用於初始化一個特殊的子類LinkedHashMap。LinkedHashMap繼承自HashMap,並且在每個Entry對象中維護了一個雙向鏈表,該鏈表可以用於按照插入順序或者訪問順序進行迭代。
四、具有固定順序的HashMap示例代碼
Map linkedHashMap = new LinkedHashMap(16, 0.75f, true); linkedHashMap.put("1", "one"); linkedHashMap.put("2", "two"); linkedHashMap.put("3", "three"); for(Map.Entry entry : linkedHashMap.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } //輸出結果為: //1 : one //2 : two //3 : three linkedHashMap.get("1"); linkedHashMap.get("2"); linkedHashMap.get("3"); for(Map.Entry entry : linkedHashMap.entrySet()) { System.out.println(entry.getKey() + " : " + entry.getValue()); } //輸出結果為: //2 : two //3 : three //1 : one
五、其他說明
在使用HashMap時,如果需要按照鍵的順序進行遍歷,可以考慮使用具有固定順序的LinkedHashMap。但是要注意的是,LinkedHashMap相比於HashMap會增加一些額外的開銷,因此在對性能要求較高的場景下,需要謹慎選擇。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/244931.html