Чтобы быть в безопасности, вы должны изменить перед добавлением, если только нет особой причины, по которой вы не можете сделать это, и вы знаете, что коллекция может обработать изменение.Можно разумно предположить, что пример безопасен, поскольку общий List
контракт не зависит от атрибутов объекта - но это ничего не говорит о конкретных реализациях, которые могут иметь дополнительное поведение, зависящее от значения объекта.TreeSet и Maps в целом не допускают изменения объектов после их вставки, поскольку структура коллекции зависит от атрибутов объекта.Для деревьев любые атрибуты, используемые компаратором, не могут быть изменены после добавления элемента.Для карт это hashCode, который должен оставаться постоянным.
Так что, в общем, сначала измените, а затем добавьте.Это становится еще более важным в случае одновременных коллекций, поскольку добавление first может привести к тому, что другие пользователи коллекции увидят объект до того, как ему будет присвоено его окончательное состояние.