У меня есть карта, для которой я предоставляю ключевой класс, для которого я реализовал компаратор. Компаратор частично основан на времени, поэтому порядок может измениться с течением времени. Вопрос в том, когда производится сравнение между объектами, во время вставки в карту или во время создания итератора?
Во время вставки. Но вы легко можете проверить это сами, изучив код этих классов. А компаратор основан на времени, это может вызвать проблему, когда вы не сможете получить элементы из этого TreeMap по ключу.




Дерево построено на вставке.
Также обратите внимание на следующее предупреждение в javadoc Map:
Note: great care must be exercised if mutable objects are used as map keys. The behavior of a map is not specified if the value of a [key] object is changed in a manner that affects equals comparisons while the object is a key in the map.
Итак, метод сравнения должен быть стабильным, т.е. не должен меняться с течением времени.
При каждом изменении ключа его необходимо удалить перед изменением и повторно добавить после изменения.
Сделайте ваши ключи неизменяемыми. Это делается во время вставки и назначается место в памяти.