Я вижу огромное преимущество в производительности при использовании putAll вместо put.Смотрите пример программы ниже:
открытый класс SampleTest {
public static void main(final String[] args) {
final Map<String, String> testMap = new HashMap<>();
final Map<String, String> testMap2 = new HashMap<>();
final LocalDateTime startTestTime = LocalDateTime.now();
for(int i=0; i < 1000000; i++) {
testMap.put(i+"", i+"");
}
final LocalDateTime endTestTime = LocalDateTime.now();
System.out.println("<<<<<<<<<Time for put>>>>>>>>>>>");
System.out.println(ChronoUnit.MILLIS.between(startTestTime, endTestTime));
final LocalDateTime startTestTime1 = LocalDateTime.now();
testMap2.putAll(testMap);
final LocalDateTime endTestTime1 = LocalDateTime.now();
System.out.println("<<<<<<<<<Time for put all>>>>>>>>>>>");
System.out.println(ChronoUnit.MILLIS.between(startTestTime1, endTestTime1));
}
}
Возвращает (в миллисекундах):
<<<<<<<<<Time for put>>>>>>>>>>>
1934
<<<<<<<<<Time for put all>>>>>>>>>>>
116
Вывод:putAll () определенно более производительный, чем put () с приведенными ниже оговорками.1. Этот результат находится на моей машине (т.е. зависит от конфигурации машины).Но вы все еще видите большую разницу.2. Как упоминалось выше, Map является интерфейсом, поэтому производительность будет зависеть от реализации, я рассмотрел HashMap, поскольку он широко используется.Поэтому, если производительность является ограничением, вы можете предпочесть putAll () для HashMap по крайней мере.