Design HashMap.

来源:互联网 发布:网络伤感情歌排行榜 编辑:程序博客网 时间:2024/05/22 13:32
// 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;  }}

0 0
原创粉丝点击