Добавление элементов
Сначала вычисляется хэшкод ключа, затем индекс корзины в которую он будет добавлен по модулю от величины коллекции
int bucketNum = (hashcode & 0x7fffffff) % capacity;

Если такой ключ есть в коллекции, то выбросит исключение. Если присваивать по индексу, то новый элемент заменит старый. Если количество элементов меньше емкости словаря, то сложность приближается к О(1). Если необходимо увеличить емкость, то сложность становится O(n), где n - количество элементов. Если происходит [[Коллизия|коллизия]], т.е. элемент с таким индексом уже существует в массиве хэшей, то значение добавляется в корзину, а предыдущему последнему элементу корзины для этого ключа в поле next присваивается индекс нового элемента (Что бы можно было перебрать все значения по индексу и найти требуемое значение по ключу). Получается что для каждого индекса в таблице buckets создается однонапрявленный связный список. Этот механизм разрешения коллизий называется changing. Если количество коллизий становится большим (>100), то при расширении коллекции происходит операция перехэширования