class HashNode(object):
def __init__(self, key, value, hashCode):
key = None
value = None
hashCode = 0
self.next = None
self.key = key
self.value = value
self.hashCode = hashCode
class Map(object):
def __init__(self):
self.__bucketArray = None
self.__numBuckets = 0
self.__size = 0
self.__bucketArray = []
self.__numBuckets = 10
self.__size = 0
i = 0
while i < self.__numBuckets:
self.__bucketArray.append(None)
i += 1
def size(self):
return self.__size
def isEmpty(self):
return len(self.this) == 0
def __hashCode(self, key):
return java.util.Objects.hashCode(key)
def __getBucketIndex(self, key):
hashCode = self.__hashCode(key)
index = hashCode % self.__numBuckets
index = index * -1 if index < 0 else index
return index
def remove(self, key):
bucketIndex = self.__getBucketIndex(key)
hashCode = self.__hashCode(key)
head = self.__bucketArray[bucketIndex]
prev = None
while head is not None:
if head.key is key and hashCode == head.hashCode:
break
prev = head
head = head.next
if head is None:
return None
self.__size -= 1
if prev is not None:
prev.next = head.next
else:
self.__bucketArray[bucketIndex] = head.next
return head.value
def get(self, key):
bucketIndex = self.__getBucketIndex(key)
hashCode = self.__hashCode(key)
head = self.__bucketArray[bucketIndex]
while head is not None:
if head.key is key and head.hashCode == hashCode:
return head.value
head = head.next
return None
def add(self, key, value):
bucketIndex = self.__getBucketIndex(key)
hashCode = self.__hashCode(key)
head = self.__bucketArray[bucketIndex]
while head is not None:
if head.key is key and head.hashCode == hashCode:
head.value = value
return
head = head.next
self.__size += 1
head = self.__bucketArray[bucketIndex]
newNode = HashNode(key, value, hashCode)
newNode.next = head
self.__bucketArray[bucketIndex] = newNode
if (1.0 * self.__size) / self.__numBuckets >= 0.7:
temp = self.__bucketArray
self.__bucketArray = []
self.__numBuckets = 2 * self.__numBuckets
self.__size = 0
i = 0
while i < self.__numBuckets:
self.__bucketArray.append(None)
i += 1
for headNode in temp:
while headNode is not None:
self.add(headNode.key, headNode.value)
headNode = headNode.next
@staticmethod
def main(args):
map = Map()
map.add("this", 1)
map.add("coder", 2)
map.add("this", 4)
map.add("hi", 5)
print(len(map))
print(map.pop("this"))
print(map.pop("this"))
print(len(map))
print(not map)
Comments