hashmap底層實現是採用了雜湊表,屬於一種基本的資料結構,而雜湊表的基本結構是「陣列+鍊錶」之前我們說到陣列和鍊錶,它們之間的優缺點如下
陣列的查詢速度快,增刪效率低
鍊錶的增刪效率高,查詢速度低
這裡我們想如何才能把這兩者的優勢集中起來呢?於是雜湊表就出來了。
我們手寫乙個hashmap類來看一下儲存原理
package com.boker.collection;
/** * 用於myhashmap中
*/public
class
node2
package com.boker.collection;
/** * 雜湊表底層是陣列+鍊錶
* @author administrator
* */
public
class
myhashmap
//存放資料
public
void
put(k key , v value)
else
else
}//key沒有重複的話,則新增到當前陣列鍊錶的最後if(
!keyisrepeat)}}
//獲取值
public v get
(k key)
else}}
return value;
}public
intmyhash
(int v ,
int length)
@override
public string tostring()
} sb.
setcharat
(sb.
length()
-1,'}');
return sb.
tostring();}}
package com.boker.collection;
public
class
testmap
}
執行結果:
手動實現簡單HashMap。
hashmap實現方式兩種 陣列加鍊表 陣列加紅黑樹 這裡只簡單實現了第一種方式,並且未實現拓容。雜湊函式用了最簡單的取餘法。順便加上了泛型,簡單練習一下 author 馬潔 date 2019 10 26 19 32 public class link public link 插入乙個鍵值對,如果...
C 簡單實現HashMap
執行緒不安全 2倍擴容,方便使用位運算計算桶位置 但存在極端情況下的弊端 不支援將鍊錶轉為紅黑樹 pragma once include hash函式 inthash int key 執行緒不安全容器 2倍擴容,方便計算 不支援鍊錶轉為紅黑樹 class hashmap node findnode ...
自己實現乙個簡單的hashmap
這個hashmap實現方式應該是jdk1.7的,在資料量小的時候和jdk1.8實現的差不多,不過我這個沒有採用鍊錶長度8時轉化紅黑樹增加查詢效率,在擴容時也是全部元素重新hash,計算新的位置,所以如果大資料量的時候,複製到新的陣列就會比較慢.jdk8裡面對複製到新的陣列也是有優化的,我這裡就沒做了...