Veo un gran beneficio en el rendimiento cuando uso putAll en lugar de put. Ver el programa de ejemplo siguiente:
clase pública 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));
}
}
Esto devuelve (en milisegundos):
<<<<<<<<<Time for put>>>>>>>>>>>
1934
<<<<<<<<<Time for put all>>>>>>>>>>>
116
Conclusión: putAll() es definitivamente más Performant than put() con las renuncias de responsabilidad a continuación. 1. Este resultado está en mi máquina (es decir, depende de la configuración de la máquina). Pero todavía ves una gran diferencia. 2. Como se mencionó anteriormente Map es una interfaz, por lo que el rendimiento dependerá de la implementación; he considerado HashMap, ya que es ampliamente utilizado. Por lo tanto, si el rendimiento es una restricción, puede preferir putAll() para HashMap al menos.
Esa última línea es un poco engañosa. Aunque AbstractMap _does_ funciona como usted lo describe, otras implementaciones concretas de Map no funcionan. –
@Paul: +1, tienes razón. Es un poco simplificado, pero creo que la mayoría de las implementaciones compatibles con la interfaz de Map funcionan de esa manera, ya que la interfaz de Map no da mucho margen de acción. –