當前位置:編程學習大全網 - 源碼下載 - Android HashMap的使用

Android HashMap的使用

HashMap 和 HashSet 是 Java Collection Framework 的兩個重要成員,其中 HashMap 是 Map 接口的常用實現類,HashSet 是 Set 接口的常用實現類。雖然 HashMap 和 HashSet 實現的接口規範不同,但它們底層的 Hash 存儲機制完全壹樣,甚至 HashSet 本身就采用 HashMap 來實現的。

1. 程序試圖將多個 key-value 放入 HashMap 中時,以如下代碼片段為例:

Java代碼

HashMap<String , Double> map = new HashMap<String , Double>();

map.put("語文" , 80.0);

map.put("數學" , 89.0);

map.put("英語" , 78.2);

2.HashMap 采用壹種所謂的“Hash 算法”來決定每個元素的存儲位置。

當程序執行 map.put("語文" , 80.0); 時,系統將調用"語文"的 hashCode() 方法得到其 hashCode 值——每個 Java 對象都有 hashCode() 方法,都可通過該方法獲得它的 hashCode 值。得到這個對象的 hashCode 值之後,系統會根據該 hashCode 值來決定該元素的存儲位置。

3. HashMap 類的 put(K key , V value) 方法的源代碼:

public V put(K key, V value)

{

// 如果 key 為 null,調用 putForNullKey 方法進行處理

if (key == null)

return putForNullKey(value);

// 根據 key 的 keyCode 計算 Hash 值

int hash = hash(key.hashCode());

// 搜索指定 hash 值在對應 table 中的索引

int i = indexFor(hash, table.length);

// 如果 i 索引處的 Entry 不為 null,通過循環不斷遍歷 e 元素的下壹個元素

for (Entry<K,V> e = table[i]; e != null; e = e.next)

{

Object k;

// 找到指定 key 與需要放入的 key 相等(hash 值相同

// 通過 equals 比較放回 true)

if (e.hash == hash && ((k = e.key) == key

|| key.equals(k)))

{

V oldValue = e.value;

e.value = value;

e.recordAccess(this);

return oldValue;

}

}

// 如果 i 索引處的 Entry 為 null,表明此處還沒有 Entry

modCount++;

// 將 key、value 添加到 i 索引處

addEntry(hash, key, value, i);

return null;

}

  • 上一篇:好玩的項目——人臉生成
  • 下一篇:昵稱女生難念四字成語
  • copyright 2024編程學習大全網