摘要: 一直以來似乎都有一個錯覺,認為map跟其他的集合類一樣繼承自Collection,其實不然,Map和Collection在結(jié)構(gòu)層次上是沒有任何關(guān)系的,通過查看源碼可以發(fā)現(xiàn)map所有操作都是基于key-value對,而不是單獨的元素。
下面以HashMap為例子,深入對Map的實現(xiàn)機制進行了解,在這個過程中,請打開jdk源碼。
Hash算法
HashMap使用Hash算法,所以在解剖HashMap之間,需要先簡單的了解Hash算法,Hash算法一般也成為散列算法,通過散列算法將任意的值轉(zhuǎn)化成固定的長度輸出,該輸出就是散列值,這是一種壓縮映射,也就是,散列值的空間遠遠小于輸入的值空間。
簡單的說,hash算法的意義在于提供了一種快速存取數(shù)據(jù)的方法,它用一種算法建立鍵值與真實值之間的對應(yīng)關(guān)系,(每一個真實值只能有一個鍵值,但是一個鍵值可以對應(yīng)多個真實值),這樣可以快速在數(shù)組等里面存取數(shù)據(jù)。
下面我們建立一個HashMap,然后往里面放入12對key-value,這個HashMap的默認數(shù)組長度為16,我們的key
閱讀全文