HashMap的簡單示例

HashMap的實現(jdk1.8):有數組+鏈表+二叉樹(紅黑樹,說是平衡二叉樹又多一些條件,人沒看懂源碼) 默認的數組長度爲16(寫源碼的人都喜歡用移位),裝載因子(也就是數組的坑有75%有元素啦,網上有人翻譯爲負載因子,加載因子(我的以爲加載因子不形象))爲0.75,大於0.75時就得對數組擴容。鏈表的長度大於8,就將其轉二叉樹,低於6轉爲鏈表,若是數組的長度大於64,就講鏈表轉爲樹。屬於線程不安全,不能保證具體的位置數組

我的見解:寫這我的的人真是把數據結構的優勢用的淋漓精緻,能優化的都用上啦,比較適合大規模的數組查找,查找效率高。感受彷佛應該屬於犧牲空間來提升效率的。 與Hashtable的比較:1.線程安全 2.實現原理不同,用的是數組和鏈表,擴容方式不同 3在1.0實現的,沒有維護插入的順序 LinkedHashMap:用了雙向鏈表,維護了插入的順序。 public class HashMap_test {安全

public static void main(String[] args) {

    Map<String,String> map = new HashMap<>();
    map.put("小米","5999");
    map.put("華爲","6999");
    map.put("VIVO","3434");
    map.put("VIVO","34345");
	
    //不判斷直接put,有相同的key直接覆蓋
    map.put(null,"0000");
	
    //判斷不存在是才put,不會覆蓋jdk.1.8才提供,通常方法涉及到函數表達式的,是1.8後的
    map.putIfAbsent("蘋果","123");
    String modifyKey="小米";

    //這個會出現空指針異常,對給定的key的值進行操做
    map.compute(modifyKey,(Key,oldValue)->oldValue+"2");

    //給定的key,新的值,對新的值和舊的值進行一個操做,看我的須要
    map.merge("小米","12",(oldvalue,newvalue)->oldvalue+newvalue);
    //1遍歷 使用Entry對象遍歷
    Set<Map.Entry<String,String>> set=map.entrySet();
    for(Map.Entry enter:set)
        System.out.println(enter.getKey()+" "+enter.getValue());

    //2使用鍵遍歷
   Set<String> set1=map.keySet();
   for(String i:set1)
       System.out.println(i+":"+map.get(i));

   //使用函數式遍歷
    map.forEach((key,value)-> System.out.println(key+"::"+value));
}

}數據結構

相關文章
相關標籤/搜索