Maison >Java >javaDidacticiel >ArrayList to Array : Pourquoi `toArray(new MyClass[0])` est-il plus rapide que `toArray(new MyClass[myList.size()])` ?

ArrayList to Array : Pourquoi `toArray(new MyClass[0])` est-il plus rapide que `toArray(new MyClass[myList.size()])` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-02 09:50:10473parcourir

ArrayList to Array: Why is `toArray(new MyClass[0])` Faster Than `toArray(new MyClass[myList.size()])`?

L'énigme du tableau : .toArray(new MyClass[0]) vs .toArray(new MyClass[myList.size()])

Lorsqu'il s'agit d'ArrayLists, il est souvent nécessaire de les convertir en tableaux. Pour ce faire, on peut utiliser l'une ou l'autre de ces deux techniques :

// Option 1: Specify Array Size
MyClass[] arr = myList.toArray(new MyClass[myList.size()]);

// Option 2: Blank Array
MyClass[] arr = myList.toArray(new MyClass[0]);

En termes de performances, un constat inattendu est apparu : sur Hotspot 8, l'utilisation d'un tableau vide surpasse étonnamment la version prédimensionnée :

Benchmark                      (n)  Mode  Samples    Score   Error  Units
c.a.p.SO29378922.preSize         1  avgt       30    0.025 ▒ 0.001  us/op
c.a.p.SO29378922.preSize       100  avgt       30    0.155 ▒ 0.004  us/op
c.a.p.SO29378922.preSize      1000  avgt       30    1.512 ▒ 0.031  us/op
c.a.p.SO29378922.preSize      5000  avgt       30    6.884 ▒ 0.130  us/op
c.a.p.SO29378922.preSize     10000  avgt       30   13.147 ▒ 0.199  us/op
c.a.p.SO29378922.preSize    100000  avgt       30  159.977 ▒ 5.292  us/op
c.a.p.SO29378922.resize          1  avgt       30    0.019 ▒ 0.000  us/op
c.a.p.SO29378922.resize        100  avgt       30    0.133 ▒ 0.003  us/op
c.a.p.SO29378922.resize       1000  avgt       30    1.075 ▒ 0.022  us/op
c.a.p.SO29378922.resize       5000  avgt       30    5.318 ▒ 0.121  us/op
c.a.p.SO29378922.resize      10000  avgt       30   10.652 ▒ 0.227  us/op
c.a.p.SO29378922.resize     100000  avgt       30  139.692 ▒ 8.957  us/op

Le compilateur JVM et JIT optimise la création et l'initialisation de nouveaux tableaux correctement dimensionnés. Cependant, ces optimisations ne peuvent pas être appliquées aux tableaux créés par l'utilisateur. Par conséquent, l'utilisation d'un tableau vide permet à la JVM d'effectuer ces optimisations, ce qui entraîne des performances améliorées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn