Мне кажется, что метод HashSet.contains(Object) выполняется в постоянное время. Он просто получает хеш-код объекта, а затем просматривает его в хеш-таблице.
Во-первых, кто-нибудь может подтвердить, правда ли это?
Во-вторых, если это правда, существует ли риск столкновений, где два объекта могут иметь один и тот же хэш-код, и, следовательно, HashSet считает, что он имеет оба, когда он имеет только один?