碼上生花,echarts 作品展示賽正式啟動!>>>
以下是 map 的繼承關係圖:
map 常用的實現類如下:
常用方法包括:put、remove、get、size 等,所有方法如下圖:
// 增加元素
hashmap.put("name", "老王");
hashmap.put("age", "30");
hashmap.put("***", "你猜");
// 刪除元素
hashmap.remove("age");
// 查詢單個元素
system.out.println(hashmap.get("age"));
// 迴圈所有的 key
for (object k : hashmap.keyset())
// 迴圈所有的值
for (object v : hashmap.values())
以上為 hashmap 的使用示例,其他類的使用也是類似。
hashmap 底層的資料是陣列被成為雜湊桶,每個桶存放的是鍊錶,鍊錶中的每個節點,就是 hashmap 中的每個元素。在 jdk 8 當鍊表長度大於等於 8 時,就會轉成紅黑樹的資料結構,以提公升查詢和插入的效率。
hashmap 資料結構,如下圖:
1)新增方法:put(object key, object value)
執行流程如下:
原始碼及說明:
public v put(k key, v value)
static final int hash(object key)
final v putval(int hash, k key, v value, boolean onlyifabsent,
boolean evict)
if (e.hash == hash &&
((k = e.key) == key || (key != null && key.equals(k))))
break;
p = e;}}
// 寫入
v oldvalue = e.value;
if (!onlyifabsent || oldvalue == null)
e.value = value;
afternodeaccess(e);
return oldvalue;}}
++modcount;
// 超過load factor*current capacity,resize
if (++size > threshold)
resize();
afternodeinsertion(evict);
return null;
}
put() 執行流程圖如下:
2)獲取方法:get(object key)
執行流程如下:
原始碼及說明:
public v get(object key)
/*** 該方法是 map.get 方法的具體實現
* 接收兩個引數
* @param hash key 的 hash 值,根據 hash 值在節點陣列中定址,該 hash 值是通過 hash(key) 得到的
* @param key key 物件,當存在 hash 碰撞時,要逐個比對是否相等
* @return 查詢到則返回鍵值對節點物件,否則返回 null
*/final nodegetnode(int hash, object key) while ((e = e.next) != null); // 看看是否還有下乙個節點,如果有,繼續下一輪比對,否則跳出迴圈}}
return null; // 在比對完了應該比對的樹節點 或者全部的鍊錶節點 都沒能匹配到 key,那麼就返回 null
集合Map詳解
1.底層 陣列加鍊表 雜湊表 2.key value的形式儲存資料key是不允許有重複值 value是允許有重複值3.可以通過key,獲得value 4.遍歷方式迭代器 keyset 返回此對映中包含的鍵的 set 檢視。迭代鍵值對 entryset 5.常見方法 put 新增 get 查詢 rem...
集合二 Map方法詳解
儲存對映關係的資料,集合中儲存方式key value。key不能重複。如果重複會將第一次的values覆蓋。實現map介面的類有 hashtable,linkedhashmap,hashmap,treemap hashmap可以使用null作為key或value。由於key不能重複,最多只能有乙個k...
Go語言 集合 Map 詳解
部落格說明 說明map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。map 是一種集合,所以我們可以像迭代陣列和切片那樣迭代它。不過,map 是無序的,我們無法決定它的返回順序,這是因為 map 是使用 hash 表來實現的 定義m...