private void Resize() { int NewBucketSize = _BucketSize; if (_BucketSize / ActualSize > 4) { for (int i = (ActualSize + 1) / 2; i <= _BucketSize; i++) { if (IsPrime(i)) { NewBucketSize = i; break; } } } else if (ActualSize / _BucketSize >= 4) { for (int i = 2 * (ActualSize + 1); i <= 10 * ActualSize; i++) { if (IsPrime(i)) { NewBucketSize = i; break; } } } else { return; } HSLinkList <K, V>[] NewList = new HSLinkList <K, V> [NewBucketSize]; foreach (var item in defChain) { if (item != null) { foreach (var subitem in item) { if (subitem != null) { dynamic temp = subitem; //NewList.(temp.key, temp.value); int Position = temp.key.GetHashCode() % NewBucketSize; if (NewList[Position] == null) { NewList[Position] = new HSLinkList <K, V>(_Comparer); } NewList[Position].InsertFront(temp.key, temp.value); } } } } this.defChain = NewList; this._BucketSize = NewBucketSize; }
public override void Insert(K key, V value) { int ChainPosition = Compression(key.GetHashCode()); HSLinkList <K, V> Temp = defChain[ChainPosition]; if (Temp == null) { defChain[ChainPosition] = new HSLinkList <K, V>(_Comparer); } defChain[ChainPosition].InsertFront(key, value); ActualSize++; Resize(); }