class HashMap
Entry = Struct.new :key,:value,:next
def initialize
@table = [nil]*7
@count = 0
end
def each
for p in @table
until p.nil?
yield p.key, p.value
p = p.next
end
end
end
def rehash
new_table = [nil]*(@count*2+1)
for p in @table
until p.nil?
q = p
p = p.next
index = q.key.hash % new_table.size
q.next = new_table[index]
new_table[index] = q
end
end
@table = new_table
nil
end
def key? key
index = key.hash % @table.size
p = @table[index]
until p.nil?
return true if p.key==key
p = p.next
end
false
end
def [] key
index = key.hash % @table.size
p = @table[index]
until p.nil?
break p.value if p.key==key
p = p.next
end
end
def []= key,value
index = key.hash % @table.size
p = @table[index]
until p.nil?
if p.key == key
p.value = value
return
end
p = p.next
end
rehash if @count>(@table.size*0.75)
@table[index] = Entry.new key,value,@table[index]
@count += 1
end
def delete key
index = key.hash % @table.size
p = @table[index]
q = nil
until p.nil?
if p.key == key
if q.nil?
@table[index] = p.next
else
q.next = p.next
end
@count -= 1
return
end
q = p
p = p.next
end
end
end
HashMap
最新推荐文章于 2024-12-09 19:59:05 发布