哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(如超过容量的十分之一),我们应该将哈希表容量扩大一倍,并将所有的哈希值重新安排。
取出哈希表中的所有元素通过哈希函数重新计算位置 负数要特殊处理
public class Solution {
/**
* @param hashTable: A list of The first node of linked list
* @return: A list of The first node of linked list which have twice size
*/
public ListNode[] rehashing(ListNode[] hashTable) {
int newCapacity = hashTable.length * 2;
ListNode[] newHashTable = new ListNode[newCapacity];
for(ListNode node : hashTable){
if(node == null)
continue;
while(node != null){
int pos = hashcode(node.val, newCapacity);
if(newHashTable[pos] == null){
newHashTable[pos] = new ListNode(node.val);
}
else{
ListNode cur = new ListNode(node.val);
ListNode n = newHashTable[pos];
while(n.next != null)
n = n.next;
n.next = cur;
}
node = node.next;
}
}
return newHashTable;
}
public int hashcode(int key, int capacity){
if(key < 0)
return (key % capacity + capacity) % capacity;
return key % capacity;
}
};