706. 设计哈希映射

不使用任何内建的哈希表库设计一个哈希映射

具体地说,你的设计应该包含以下的功能

put(key, value):向哈希映射中插入(键,值)的数值对。如果键对应的值已经存在,更新这个值。
get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1。
remove(key):如果映射中存在这个键,删除这个数值对。

示例:

MyHashMap hashMap = new MyHashMap();
hashMap.put(1, 1);
hashMap.put(2, 2);
hashMap.get(1); // 返回 1
hashMap.get(3); // 返回 -1 (未找到)
hashMap.put(2, 1); // 更新已有的值
hashMap.get(2); // 返回 1
hashMap.remove(2); // 删除键为2的数据
hashMap.get(2); // 返回 -1 (未找到)

注意:

所有的值都在 [0, 1000000]的范围内。

操作的总数目在[1, 10000]范围内。

不要使用内建的哈希库。

class MyHashMap {
/** Initialize your data structure here. */
class Entry {
int key;
int value;
Entry next;
Entry(int key, int value) {
this.key = key;
this.value = value;
}
}
int cap = 200000;
Entry [] arr = new Entry[cap];
public MyHashMap() {
} /** value will always be non-negative. */
public void put(int key, int value) {
if(arr[key % cap] != null) {
boolean isFound = false;
Entry entry = arr[key % cap], last = null;
while(entry != null) {
last = entry;
if(entry.key == key) {
entry.value = value;
isFound = true;
break;
}
entry = entry.next;
}
if(!isFound) {
last.next = new Entry(key, value);
}
} else {
arr[key % cap] = new Entry(key, value);
}
} /** Returns the value to which the specified key is mapped, or -1 if this map contains no mapping for the key */
public int get(int key) {
Entry entry = arr[key % cap];
while(entry != null) {
if(entry.key == key) {
return entry.value;
}
entry = entry.next;
}
return -1;
} /** Removes the mapping of the specified value key if this map contains a mapping for the key */
public void remove(int key) {
Entry entry = arr[key % cap], prev = null;
while(entry != null) {
if(entry.key == key) {
if (prev == null) {
arr[key % cap] = entry.next;
} else {
prev.next = entry.next;
}
break;
}
prev = entry;
entry = entry.next;
}
}
} /**
* Your MyHashMap object will be instantiated and called as such:
* MyHashMap obj = new MyHashMap();
* obj.put(key,value);
* int param_2 = obj.get(key);
* obj.remove(key);
*/

最新文章

  1. C#使用GET、POST请求获取结果
  2. walk around by The provided App differs from another App with the same version and product ID 分类: Sharepoint 2015-07-05 08:14 4人阅读 评论(0) 收藏
  3. 理解一下单片机的I2C和SPI通信
  4. ASP.NET 大文件上传
  5. Visual Studio Code 与 Github 集成
  6. jquery.tochart.js
  7. SQL 编码标准
  8. Windows下使用console线连接思科交换机
  9. Django(五)母版继承、Cookie、视图装饰器等
  10. 多线程之CEvent
  11. template.js artTemplate 简洁语法官网下载不了 template.js artTemplate 新下载地址
  12. NLP-训练个model出来写诗
  13. Xcode 6 免证书真机调试
  14. hadoop学习---运行第一个hadoop实例
  15. Haskell语言学习笔记(49)ByteString Text
  16. HDU - 1051 Wooden Sticks 贪心 动态规划
  17. Flink-on-yarn
  18. 原生JS,运动的小人
  19. fastjson 应用
  20. 使用BIND安装智能DNS服务器(二)---配置rndc远程控制

热门文章

  1. Blazor入门:ASP.NET Core Razor 组件
  2. Day_12【集合】扩展案例2_键盘录入一个字符串,对其进行去重,并将去重后的字符串组成新数组
  3. redis文章汇总
  4. 设计模式之GOF23备忘录模式
  5. [hdu5525 Product]暴力
  6. c#实现生成PDF的底层方法
  7. search(13)- elastic4s-histograms:聚合直方图
  8. 王艳 201771010127《面向对象程序设计(java)》第三周学习总结
  9. 201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结
  10. PAT 乙级-1025 链表反转