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(); } }
/// <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); } } }
public void Add(V element) { int index = _function.Hash(element.GetKey()); _storage.Add(index, element); }