示例#1
0
        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;
        }
示例#2
0
        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();
        }