java 關於 hashmap 的實現原理的測試

分類:IT技術 時間:2017-07-09

  網上關於HashMap的工作原理的文章多了去了,所以我也不打算再重復別人的文章。我就是有點好奇,我怎麽樣能更好的理解他的原理,或者說使用他的特性呢?最好的開發就是測試~

  雖說不詳講hashmap的工作原理,但是起碼的常識還是要提一下的。

一句話:hashmap最直觀的表現是一維數組或者說一維字典,但是每個每個值又可以指向另一個數組或都字典!

一張圖:

  其實說實話,給我個人的感覺是,說鏈表只是顯得高大上些罷了,當然這片面的理解,不過也是令人誤解的地方。

  我曾經就以為,鏈表真是個高大上的東西,那我怎樣生成這樣的鏈接呢?

  難道是 HashMap.put("c", "xxx").put("sss", "ssssss"), 鏈式調用 ?

  難道是 HashMap.get("c").put("ccx")?

  難道是 HashMap.put("c", "1"); HashMap.put("c", "2"); HashMap.put("c", 333); ?

  很顯然,這是會犯錯誤的,因為IDE就不會讓你通過過,編譯是不會讓你過的?

  那麽,回到這個問題上,什麽叫鏈表?

  百度百科解釋:鏈表是一種物理存儲單元上非連續、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。鏈表由一系列結點(鏈表中每一個元素稱為結點)組成,結點可以在運行時動態生成。每個結點包括兩個部分:一個是存儲數據元素的數據域,另一個是存儲下一個結點地址的指針域。

  那麽,說白了,鏈表就是說,你這個key可以指向任何地方,當然也就包含了hashmap了。 所以想要形成多層鏈表,只要嵌套多個hashmap就可以了。

  測試代碼如下:

import Java.util.HashMap;
public class HashmapImprove {
    public static void main(String[] args) {
        HashMap<String, Object> hashMap1 = new HashMap<>();
        HashMap<String, Object> hashMap2 = new HashMap<>();
        HashMap<String, Object> hashMap3 = new HashMap<>();
        hashMap1.put("h1-1", 2);
        hashMap1.put("h1-2", 336);
        hashMap2.put("hashmap1", hashMap1);
        hashMap2.put("h2-2", "moto");
        hashMap2.put("h2-3", "xys");
        hashMap3.put("hashmap2", hashMap2);
        hashMap3.put("h3-2", "3333");
        hashMap3.put("h3-3", 2);
        system.out.println("hello, world." + hashMap3);
    }
}

  斷點調試一下,清晰明了:

  說得更直白一點,Hashmap其實就是個多維數據,只不過數據類型可以是任意的而已。當然了,其實現原理還是很高大上的,比如:鏈表、遍歷、性能、並發!

 

  遇到不懂的問題,測試一下就明白了!

  做個不糾結的開發!哈哈

 


Tags: quot 結點 HashMap 一維 hashmap 一個

文章來源:


ads
ads

相關文章
ads

相關文章

ad