Design HashMap.
2016-06-16 07:32
344 查看
// use linked list for chaining. class LinkedHashEntry { private: int key; int value; LinkedHashEntry* next; public: LinkedHashEntry(int key, int value) { this->key = key; this->value = value; this->next = NULL; } int getKey() { return key; } int getValue() { return value; } void setValue(int value) { this->value = value; } LinkedHashEntry* getNext() { return next; } void setNext(LinkedHashEntry *next){ this->next = next; } } const int TABLE_SIZE = 128; class HashMap { private: LinkedHashEntry **table; public: HashMap() { table = new LinkedHashEntry*(TABLE_SIZE); for(int i = 0; i < TABLE_SIZE; ++i) { table[i] = NULL; } } int get(int key) { int hashValue = key %.. if(table[hashValue] == NULL) { return -1; } else { LinkedHashEntry* entry = table(hashValue); while(entry != NULL && entry->getKey() != key) { entry = entry->getNext(); } if(entry == NULL) return -1; else return entry->getValue(); } } void put(int key, int value) { int hashValue = key %... if(table[hashValue] == NULL) { table[hashValue] = new LinkedHashEntry(key, value); } else { LinkedHashEntry *entry = table[hashValue]; while(entry->getNext() != NULL) { entry = entry->getNext(); if(entry->getKey() == key) {entry->setValue(value);} else entry->setNext(new LinkedHashEntry(key, value)); } } void remove(int key) { int hashValue = key % ... if(table[hashValue]) { LinkedHashEntry *prevEntry = NULL; LinkedHashEntry* entry = table[hashValue]; while(entry->getNext() && entry->getKey() != key) { prevEntry = entry; entry = entry->getNext(); } if(entry->getKey() == key) { if(prevEntry == NULL) { LinkedHashEntry* nextEntry = entry->getNext(); delete entry; table[hash] = nextEntry; } else { LinkedHashEntry *next = entry->getNext(); delete next; prevEntry->setNext(next); } } } } ~HashMap() { for(int i = 0; i < TABLE_SIZE; ++i) { if(table[i] != NULL) { LinkedHashEntry* prevEntry = NULL; LinkedHashEntry* entry = table[i]; while(entry) { prevEntry = entry; entry = entry->getNext(); delete prevEntry; } } } delete[] table; } }
相关文章推荐
- Linux下软件安装之Mysql安装
- iOS中使用钥匙串
- java中四种访问权限
- 文件的基本管理和XFS文件系统备份恢复
- 代码块
- 【MyBatis学习13】MyBatis中的二级缓存
- 作业九———《软件工程》课程的总结
- you must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obta
- Android之BroadcastReceiver(四):使用本地广播
- libAFNetworking.a(AFHTTPRequestOperation.o)' does not contain bitcode.
- iOS日志获取和实时浏览器显示日志
- c#书
- 第28课 :在集成开发环境中详解spark streaming的运行日志内幕
- 6.15 考试修改+总结
- 第二章 指南(4.3)添加 View
- asp.net core 中间件详解及项目实战
- UIWebView保存图片
- Android之BroadcastReceiver(三):发送自定义广播
- 一种排序
- JS入门系列(2)-原型-实例属性