HashMap分揀儲存示例

2021-08-29 01:57:01 字數 1739 閱讀 7932

眾所周知,hashmap是存放鍵值對的資料結構,但是在實際專案中,還有乙個比較常用的hashmap分揀儲存思想,本文將通過"統計一句英文中各個單詞出現的次數"示例來說明hashmap分揀儲存的思想。

簡單的理解,舉乙個生活中的例子,分揀儲存類似於我們平日生活中的快遞分包裹,大家都知道包裹發往全國各地,在打包過程中,假設其中乙個包裹是發往北京的,那我們事先準備乙個袋子來裝這個包裹,假如還有另外乙個包裹也發往北京,那麼我們只需要裝在前面那個袋子,無需再準備另外乙個袋子(同乙個袋子裝發往同一目的地的包裹),遇到發往其他地方的包裹才需要另外準備新的袋子。其實就是類似分組的思想。

統計各個單詞出現的次數,大體分為三個步驟:

【a】切割字串,變成陣列

【b】分揀儲存(首先判斷map是否存在該單詞的相關次數資訊,如果不存在,初始化數量為1,如果存在,那麼拿出原數量再加上1)

【c】統計各個單詞出現次數

於是,建立如下工具類:

public class commonutils  else 

}//返回儲存各個單詞以及對應的次數

return map;}}

public class testcountwords }}

測試結果:

由此可見,成功統計了各個單詞出現的次數。

以上是直接將各個單詞的數量直接使用integer存放在map的值中,並沒有實現物件導向,下面我們改造一下工具類,使用物件導向的思想來實現。

【a】首先,建立乙個word的實體類,用於存放各個單詞的名稱以及出現的次數,並生成相應的構造方法以及setter/getter方法。

/**

* @description: 單詞類

* @author: weishihuai

* @date: 2018/10/14 15:26

*/public class word

public word(string name)

public word(string name, integer count)

public string getname()

public void setname(string name)

public integer getcount()

public void setcount(integer count)

}

【b】改造工具類,我們將word類直接儲存在map的值中,這樣就實現了物件導向程式設計。

public class commonutils2 

word word = map.get(key);

word.setcount(word.getcount() + 1);

map.put(key, word);

}//返回儲存各個單詞以及對應的次數

return map;}}

【c】測試

public class testcountwords }}

測試結果:

由此可見,同樣通過物件導向也實現了統計各個單詞出現次數的示例。

HashMap儲存原理

hashmap儲存的資料存放在記憶體中,提高hashmap資料定址速度是重點要解決的問題,所以hashmap底層的儲存結構非常關鍵,如果使用陣列儲存,時間複雜度為 1 使用鍊錶儲存,時間複雜度為o n 如果使用二叉樹儲存,時間複雜度為o lg n 所以hashmap優先使用陣列儲存,如果出現hash...

hashmap儲存資料

在hashmap中,為什麼不能使用基本資料型別作為key?其實和hashmap底層的儲存原理有關,hashmap儲存資料的特點是 無序 無索引 不能儲存重複元素。儲存元素採用的是hash表儲存資料,每儲存乙個物件的時候,都會呼叫其hashcode 方法,算出其hash值,如果相同,則認為是相同的資料...

利用分揀儲存實現1 N

案例1 分割字串,計算每個單詞出現的次數 letter類 public class letter public letter string name alt shif s o public letter string name,int count public string getname publ...