Map簡單介紹
key鍵唯一,且不可重複。我們主要使用的是HashMap。…
關鍵字:
Map中的key是根據其hash算法是否唯一和重複的。
簡單介紹hash算法:
Hash算法一般也成為雜湊演算法,通過雜湊演算法将任意的值轉化成固定的長度輸出(相同的key其hash值相同),該輸出就是散列值,這是一種壓縮映射,也就是,散列值的空間遠遠小于輸入的值空間。其實Hash算法産生的目的很單純,其發明的目的是提高海量資料的查找速度。
簡單的說,hash算法的意義在于提供了一種快速存取資料的方法,它用一種算法建立鍵值與真實值之間的對應關系,(每一個真實值隻能有一個鍵值,但是一個鍵值可以對應多個真實值),這樣可以快速在數組等裡面存取資料。
注意:equals不同的key也有可能其Hash值相同(幾率很小)。
hash 表能夠加快查找速度。使用hash表首先要申請一個定長的指針數組。通過在建立資料表時通過特定的計算公式(hash散列函數)計算出每個字元串對應的一個數值(就是将不固定長度的字元串轉換成一個固定長度的數值或索引值)。而後把此數值作為數組下标,把此字元串在資料表的序号儲存在此數組元素中(可以擴充到儲存一個對象執行個體指針)。将來想查找某字元串對應位置時,隻需要通過hash散列函數計算出字元串對應的值就可以直接知道此字元串的序号等資訊了。
這樣查找時間是O(1)了。因為不需要查找了,知道數組下标就能通路數組相應元素了,而元素中儲存的就是序号等資訊。
Map的幾種常用周遊方法
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
//Map要求key唯一,不能重複,如果重複後存入的key覆寫前存入的key
map.put("國文", 120);
map.put("國文", 130); //示例,不要這樣做
map.put("數學", 140);
map.put("英語", 127);
map.put("化學", 89);
map.put("生物", 92);
//第一種周遊key,然後擷取value
for(String key : map.keySet()) {
System.out.println("key:"+key+",velue:"+map.get(key));
}
System.out.println("----------------");
//第二種周遊key,value
for(Entry<String, Integer> entry : map.entrySet()) {
System.out.println("key:"+entry.getKey()+",velue:"+entry.getKey());
}
System.out.println("----------------");
//第三種周遊value,此周遊不能擷取到key
for(Integer value : map.values()) {
System.out.println("value:"+value);
}
System.out.println("-----------------");
//第四種周遊通過Map.entrySet使用iterator周遊key和value
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while(iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
System.out.println("key:"+entry.getKey()+",velue:"+entry.getKey());
}
}
-------------待補充.-------------