Exemplo n.º 1
0
        public override void Add(int index, V element)
        {
            for (int i = 0; i < _array.Length; i++)
            {
                int realIndex = (index + i * _mainFunction.Hash(element.GetKey())) % _array.Length;
                if (_array[realIndex] == null || _deleted[realIndex])
                {
                    _array[realIndex]   = element;
                    _deleted[realIndex] = false;
                    break;
                }
            }

            _size++;

            if (_size > _array.Length / 4 * 3)
            {
                Inflate();
            }
        }
Exemplo n.º 2
0
 /// <summary>
 /// Функция, позволяющая увеличить размер хранилища в два раза.
 /// Также обновляет положение всех элементов, в соответствии с новыми значениями хэш-функций.
 /// </summary>
 private void Inflate()
 {
     V[]    newArray   = new V[_array.Length * 2];
     bool[] newDeleted = new bool[_deleted.Length * 2];
     V[]    arr        = ToArray();
     for (int i = 0; i < newDeleted.Length; i++)
     {
         newDeleted[i] = false;
     }
     _array   = newArray;
     _deleted = newDeleted;
     base.SizeContainer().Size = newArray.Length;
     _size = 0;
     if (arr.Length > 0)
     {
         foreach (V element in arr)
         {
             Add(_outsideFunction.Hash(element.GetKey()), element);
         }
     }
 }
Exemplo n.º 3
0
        public void Add(V element)
        {
            int index = _function.Hash(element.GetKey());

            _storage.Add(index, element);
        }