1. 程式人生 > >讓你秒懂HashMap的概念及其存取原理

讓你秒懂HashMap的概念及其存取原理

HashMap可以理解為一個特殊的陣列物件,它包含多個元素,並且每個陣列元素都是一個鍵值對(稱為Entry); 同時一個位置上還不止有一個鍵值對(這是詭異的地方);這是為啥呢? 這是因為hashMap的長度是有限的; 接下來問題就來了: 如果插入的鍵值對超過了長度怎麼辦?解決方法就是連結串列

具體是怎麼玩的呢? (為什麼這麼說活?  因為java包括程式解決問題的方式是很生活化的,用你的生活經驗就能理解和找到解決辦法,所以思考程式就必須靈活開放  最忌諱的就是死板,不敢想)

一.先看看怎麼存: ①根據鍵值對的鍵算出hashcode; ②根據hashcode來決定將要新增的鍵值對放到哪個格子裡面; ③如果格子裡已經存在元素,就把新的鍵值對放到已經存在格子元素的連結串列中 按照這種邏輯封裝的api叫put方法;

二.再看看怎麼取: 也就是反過來,如何進行元素查詢呢? ①先根據鍵獲取hashcode; ②根據hashcode知道該元素存在那個格子裡; ③進入該格子,對其中的元素的鍵逐個與引數鍵比較,找到鍵後,取到對應的值(叫hash值)就行了 按照這種邏輯封裝的api叫get方法;

HashMap怎麼用? ①建立一個空的map        HashMap<String,String> map = new HashMap<String,String>();//精確鍵值對都是字串

②呼叫用put/get來實現鍵值對的存和取

    a.put的用法:

(1)插入一個鍵值對到map中:map.put("apple",0);//在其中插入一個key為apple值為0的鍵值對 (2)獲取該鍵值對的索引: int index = Hash("apple");//這樣知道該元素在哪個格子裡 

    b.get的用法:

(1)獲取一個鍵對應的值:map.get("apple"); (2)獲取該鍵值對的索引:int index = Hash("apple");