Quelle est la meilleure façon de convertir la méthode Liste de varargs appeler ci-dessous « constructeur (String ... s) ».
builder( stringList.toArray( new String[stringList.size()] ) );//with pre-difined array size
ou
builder( stringList.toArray( new String[0] ) );//without predifined size
par exemple
void test() {
List<String> stringList = new ArrayList<>();
builder( stringList.toArray( new String[stringList.size()] ) );//call builder method with pre-difining array size
builder( stringList.toArray( new String[0] ) );//call builder method with array size 0
}
void builder( String... s )
{
}
Je fait face à cette question dans une revue et je proposai builder( stringList.toArray( new String[0] ) )
est plus efficace que d' utiliser builder( stringList.toArray( new String[stringList.size()] ) )
.
Y at - il une différence significative entre ces deux? Merci
À ma connaissance
stringList.toArray( new String[stringList.size()] ) )
est plus efficace. La raison:
L'argument est nécessaire d'avoir un type réel ( String
) pour un générique List<String>
, où le paramètre de type générique est effacé à moment de l' exécution.
L'argument est utilisé pour le tableau résultant si sa taille correspond à la taille de la liste.
Si la taille est 0, le tableau passé est mis au rebut.
Ainsi, le passage d'un tableau correct enregistre une création d'objet.
Bien sûr que l' list.size()
on appelle supplémentaire. Il pourrait donc être plus lent. J'en doute.
Correction
Voir tableaux de la Sagesse des Anciens . Une référence correcte montre l'inverse: new String[0]
être plus rapide. Je viens de l'analyse très survolé intéressante, et il semble:
- (un court supplémentaire vécu
new String[0]
est hors de propos;) - faire le tableau de la copie méthode locale dans le toArray permet une autre, une copie plus rapide tableau;
- (et puis il y a l'appel supplémentaire à
size
.)
L'esprit, je l'ai pas lu suffisamment complète l'article; il est vraiment intéressant.
Conclusion (contre-intuitive): new T[0]
est plus rapide.
Faites attention à cela:
- dames de code peuvent encore penser différemment et un avertissement;
- c'est à l'échauffement: jusqu'à ce que les coups de pied hotspot JIT en, il peut être l'inverse.