哈希映射
哈希映射(HashMap)
实现
实现MyHashMap
类:
-
MyHashMap()
用空映射初始化对象 -
void put(int key, int value)
向HashMap
插入一个键值对(key, value)
。如果key
已经存在于映射中,则更新其对应的值value
-
int get(int key)
返回特定的key
所映射的value
; 如果映射中不包含key
的映射,返回-1
-
void remove(key)
如果映射中存在key
的映射,则移除key
和它所对应的value
示例:
输入:
["MyHashMap", "put", "put", "get", "get", "put", "get", "remove", "get"]
[[], [1, 1], [2, 2], [1], [3], [2, 1], [2], [2], [2]]
输出:
[null, null, null, 1, -1, null, 1, null, -1]
解释:
MyHashMap myHashMap = new MyHashMap();
myHashMap.put(1, 1); // myHashMap 现在为 [[1,1]]
myHashMap.put(2, 2); // myHashMap 现在为 [[1,1], [2,2]]
myHashMap.get(1); // 返回 1 ,myHashMap 现在为 [[1,1], [2,2]]
myHashMap.get(3); // 返回 -1(未找到),myHashMap 现在为 [[1,1], [2,2]]
myHashMap.put(2, 1); // myHashMap 现在为 [[1,1], [2,1]](更新已有的值)
myHashMap.get(2); // 返回 1 ,myHashMap 现在为 [[1,1], [2,1]]
myHashMap.remove(2); // 删除键为 2 的数据,myHashMap 现在为 [[1,1]]
myHashMap.get(2); // 返回 -1(未找到),myHashMap 现在为 [[1,1]]
实现
class HashMap {
constructor(capacity) {
this.size = 0;
this.capacity = capacity || 769;
this.data = new Array(this.capacity).fill(0).map(() => new Array());
}
hash(key) {
return key % this.capacity;
}
put(key, value) {
const hash = this.hash(key);
for (const item of this.data[hash]) {
if (item[0] === key) {
item[1] = value;
return;
}
}
this.size++;
this.data[hash].push([key, value]);
}
remove(key) {
const hash = this.hash(key);
const index = this.data[hash].findIndex((item) => item[0] === key);
if (index !== -1) {
this.size--;
this.data[hash].splice(index, 1);
}
}
get(key) {
const hash = this.hash(key);
for (let item of this.data[hash]) {
if (item[0] === key) {
return item[1];
}
}
return -1;
}
containsKey(key) {
const hash = this.hash(key);
for (let item of this.data[hash]) {
if (item[0] === key) {
return true;
}
}
return false;
}
getOrDefault(key, defaultValue) {
let result = this.get(key);
if (result === -1) {
result = defaultValue;
}
return result;
}
}