def remove(self, key): entry = self.__find(key) if entry is not None: copy_entry = map_entry(entry.key, entry.value) entry.key = None entry.value = None return copy_entry
def remove(self, key): entry = self.__find(key) if entry is not None: copy_entry = map_entry(entry.key, entry.value) entry.key = '__EMPTY__' entry.value = '__EMPTY__' return copy_entry
def __init__(self, initial_elements=17, load_factor=0.5, cmpfunction=None): self.size = 0 self.spaces = initial_elements self.load_factor = load_factor self.current_factor = load_factor self.cmpfunction = cmpfunction self.table = lt.lista('AL', cmpfunction, 0) for bucket in range(initial_elements * int(load_factor**-1)): self.table.add_last(map_entry())
def __init__(self, initial_elements=17, load_factor=2, cmpfunction=None): self.size = 0 self.spaces = initial_elements self.load_factor = load_factor self.cmpfunction = cmpfunction self.table = lt.lista('AL', cmpfunction, 0) for i in range(self.spaces): bucket = lt.lista('SL', cmpfunction) for j in range(int(load_factor)): bucket.add_last(map_entry()) self.table.add_last(bucket)
def __rehash(self): self.spaces *= 2 self.size = 0 old_table = self.table new_table = lt.lista('AL', self.cmpfunction, 0) self.table = new_table for bucket in range(self.spaces): self.table.add_first(map_entry()) for bucket in old_table: if bucket.key is not None and bucket.key != '__EMPTY__': self.put(bucket.key, bucket.value)
def put(self, key, value): table_pos = self.__hash_value(key) replaced = False bucket = self.table.get_element(table_pos) for entry in bucket: if entry.key is None and not replaced: entry.key = key entry.value = value replaced = True self.size += 1 if entry.key == key: entry.value = value replaced = True if not replaced: bucket.add_last(map_entry(key, value)) self.size += 1
def put(self, key, value): table_pos = self.__hash_value(key) entry = map_entry(key, value) iterations = 0 inserted = False while not inserted and iterations < self.table.size: bucket = self.table.get_element(table_pos) if bucket.key is None or bucket.key == '__EMPTY__': bucket.key = key bucket.value = value self.size += 1 self.current_factor = float(self.size / self.spaces) inserted = True else: table_pos += 1 if table_pos >= self.table.size: table_pos = 0 iterations += 1 if self.current_factor > self.load_factor: self.__rehash()