hashMap的使用和分析

1、背景

面試當中我們肯定會被問到集合,那集合當中hashMap被問到的概率是非常高的。這也是我們開發當中經常用到的集合類型,下面我就簡單的對這個集合做了總結。主要是對這個集合的使用進行操作。然後對他具體是實現進行了簡單的總結

2、hashMap的使用

就直接上代碼吧,如下:

    /**
     * 1、輸出是無序的
     * 2、可以爲key值NULL,value也可以爲NUll
     * 3、可以存對象但是遍歷的時候需要判斷類型,否則會異常
     */
    public void hashMaptest(){
        HashMap hashMap=new HashMap();

        UserInf userInf=new UserInf();
        userInf.setUserId(1);
        userInf.setUserName("王一");

        hashMap.put("數據key1","數據value1");
        hashMap.put("數據key2","數據value2");
        hashMap.put("數據key3","數據value3");
        hashMap.put("數據key4","數據value4");
        hashMap.put(null,null);
        hashMap.put("數據key5","數據value5");
        hashMap.put(userInf,1);
        System.out.println("單獨取userInf:"+hashMap.get(userInf));

        //防止下面異常,決定刪除對象爲key的內容
       hashMap.remove(userInf);

       Iterator iter=hashMap.entrySet().iterator();
        while (iter.hasNext()){
            Map.Entry entry = (Map.Entry) iter.next();
            String key=(String)entry.getKey();
            String value=(String) entry.getValue();
            System.out.println("key:"+key+"===value:"+value+"\n");
        }

        System.out.println("單獨取key1:"+hashMap.get("數據key1"));

    }

上面是我測試寫的代碼,我們可以看到結果:

主要是證明下面幾點在註釋中有說到,無序,可以存對象可以存null

這裏我需要說明一下key值存對象的時候,要重寫下equal和hashcode方法。你們要問爲什麼?

其實去百度一下有很多更加完美的解釋,我這就簡單粗暴的說一下唄

因爲hashMap的key值是不可以重複的,你存入對象的時候,他會判斷你的map集合裏面是否已經有已經存在的數據;

這樣就是通過equal和hashcode計算你的重複,如果你不重新寫,那就是默認Object的方法,結果可想而知。有可能你的 對象比如說你new了兩個,但是你的對象裏面的值是一模一樣的。所以在我們普通人的世界裏面是認爲這兩個對象是一樣的,但是在java對象裏面你new了兩個對象那麼他們就是不一樣的哦。而且你下次使用key對象去查詢也不太好查詢出來。

大概就是這麼個意思吧個人理解。

3、hashMap底層原理

底層怎麼實現的我這沒這水平寫不出來代碼,所以我就自己更具大家說的我選出了比較容易理解的。下面是別人家博客說的大概意思

HashMap底層就是一個數組結構,數組中的每一項又是一個鏈表。數組+鏈表結構,新建一個HashMap的時候,就會初始化一個數組。Entry就是數組中的元素,每個Entry其實就是一個key-value的鍵值對,它持有一個指向下一個元素的引用,這就構成了鏈表,HashMap底層將key-value當成一個整體來處理,這個整體就是一個Entry對象。HashMap底層採用一個Entry【】數組來保存所有的key-value鍵值對,當需要存儲一個Entry對象時,會根據hash算法來決定在其數組中的位置,在根據equals方法決定其在該數組位置上的鏈表中的存儲位置;當需要取出一個Entry對象時,也會根據hash算法找到其在數組中的存儲位置, 在根據equals方法從該位置上的鏈表中取出Entry;

4、總結

集合當中我們面試還是使用當中最容易遇到的就是hashMap集合,因爲他可以作爲一個仿對象使用,而且效率還比較高

下面記錄幾點;

1、初始大小是16

2、擴容2的次冪

3、負載因子0.75

 

 

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