В лучшем случае в него будет вставлена амортизированная O (1) и поиск O (1).
В худшем случае в него будет вставлена амортизированная O (n) и поиск O (n).
Хороший компаратор поможет сохранить реальный случай ближе к лучшему, чем худший, благодаря хорошему методу хеширования.
Плохой компаратор, ну будет плохо. (Напишите намеренно плохой компаратор, который возвращает одно и то же значение для каждого хеш-кода [допустимый, но бессмысленный], и вы сможете увидеть это поведение O (n)).
Хорошему компаратору может не повезти, но в большинстве случаев реальные случаи достаточно близки к O (1), поэтому мы можем думать о нем как о (1) и не быть направленными далеко.
Edit:
Пропустил немного о том, что "нет способа установить компаратор". Существует, HashSet имеет конструктор, который принимает один.