private void grow() {
		Bucket[] oldBuckets = buckets;
		int newCap = buckets.length * 2 + 1;
		threshold = (int) (loadFactor * newCap);
		buckets = new Bucket[newCap];
		for (int i = 0; i < oldBuckets.length; i++) {
			Bucket nextBucket;
			for (Bucket b = oldBuckets[i]; b != null; b = nextBucket) {
				if (i != Math.abs(b.hash % oldBuckets.length))
					throw new RuntimeException("" + i + ", hash: " + b.hash
							+ ", oldlength: " + oldBuckets.length);
				int newSlot = Math.abs(b.hash % newCap);
				nextBucket = b.next;
				b.next = buckets[newSlot];
				buckets[newSlot] = b;
			}
		}
	}