В случае с хэш-таблицами есть две причины, по которым запрос может работать долго.
1. Коллизии (несколько ключей с совпадающим или почти-совпадающим (в некотором смысле) хэшем). Вероятность коллизии стремится к 0 при росте n, поэтому асимптотику не портит. Если входные данные не специально подобраны или же параметры хэша выбираются случайно, то и на практике ничего плохого не случится.
2. Рост. Как и у обычного вектора, у таблицы есть некоторая емкость. Когда она заполнена, и снова делается вставка, то эта таблица растягивается в два раза, и все ключи повторно в нее вставляются. Но это вообще никак не портит асимптотику, потому что суммарно это будет стоить 1 + 2 + 4 + ... + n = 2n = O(n) на все n вставок.