眾所周知,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...