Map.putAll()
добавляет все сопоставления из аргумента к существующей карте , на которой она вызывается.Если целевая карта уже имеет сопоставления для тех же ключей, исходные сопоставления будут заменены.Сопоставления для всех остальных ключей будут сохранены.
В общем, следует предположить, что Map.clone()
будет выбрасывать CloneNotSupportedException
, так как это поведение, унаследованное от класса Object
и интерфейса Map
не определяет другое поведение.Тем не менее, HashMap
, в частности, предоставляет метод clone()
, который создает новую, пологую копию карты, на которой он вызывается.Обратите внимание, что существует большая разница между созданием новой карты, как это делает HashMap.clone()
, и добавлением записей в существующую карту, как это делает Map.putAll()
, хотя это имеет меньшее значение в случае, когда целевая карта putAll()
изначально пуст.
Когда вы хотите создать копию Map
, обычно лучше выбрать соответствующий класс реализации и создать его экземпляр с помощью конструктора, который принимает карту источника в качестве параметра.Такой конструктор не гарантированно присутствует, но он настоятельно рекомендуется для реализаций Map
общего назначения, и каждая такая реализация в стандартной библиотеке Java предлагает его.Создание новой пустой карты с последующим использованием putAll()
для ее заполнения - еще один вариант.Для безопасного использования clone()
необходимо, чтобы вы знали, что используете реализацию Map
, которая его поддерживает, поэтому редко вы можете безопасно clone()
, но не можете нормально создать подходящую карту.