您的位置:首页 > 其它

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;
  }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: