Je veux créer un nouveau tableau d'objets en mettant ensemble deux tableaux plus petits.
Ils ne peuvent pas être nuls, mais leur taille peut être 0.
Je ne peux pas choisir entre ces deux façons : sont-elles équivalentes ou l'une est-elle plus efficace (par exemple, system.arraycopy() copie des morceaux entiers) ?
MyObject[] things = new MyObject[publicThings.length+privateThings.length];
System.arraycopy(publicThings, 0, things, 0, publicThings.length);
System.arraycopy(privateThings, 0, things, publicThings.length, privateThings.length);
ou
MyObject[] things = new MyObject[publicThings.length+privateThings.length];
for (int i = 0; i < things.length; i++) {
if (i
``
La seule différence est-elle dans l'apparence du code ?
EDIT: merci pour la question liée, mais ils semblent avoir une discussion non résolue :
Est-ce vraiment plus rapide si ce n'est pas pour les types natifs
: byte[], Object[], char[] ? dans tous les autres cas, une vérification de type est exécutée, ce qui serait mon cas et donc serait équivalent... non ?
Dans une autre question liée, ils disent que la taille compte énormément
, pour une taille >24 system.arraycopy() l'emporte, pour moins de 10, la boucle manuelle est meilleure...
Maintenant je suis vraiment confus.
``
17 votes
arraycopy()
est un appel natif, qui est très certainement plus rapide.0 votes
Pourriez-vous avoir la gentillesse de répondre et d'expliquer pourquoi ? Merci !
4 votes
Avez-vous essayé de faire des benchmarks des deux implémentations différentes ?
5 votes
Jetez un coup d'œil ici: stackoverflow.com/questions/2772152/…
17 votes
Tu devrais choisir celui que tu trouves le plus lisible et le plus facile à entretenir à l'avenir. Ce n'est que lorsque tu as déterminé que c'est la source d'un goulot d'étranglement que tu devrais changer ton approche.
2 votes
Ne réinventez pas la roue!
0 votes
@Daren:- Avez-vous consulté le lien que j'ai ajouté dans ma réponse ??? javaspecialists.co.za/archive/Issue124.html
0 votes
System.arraycopy()
est intrinsèque0 votes
@RahulTripathi Je l'ai fait! et merci! mais le benchmark est biaisé pour mon cas: il utilise des types natifs et je ne suis pas sûr de son fonctionnement pour les types natifs... as-tu vu la réponse de la personne qui a essayé un benchmark personnel + des commentaires? Je suis toujours à la recherche d'une réponse convaincante à accepter... :)
0 votes
Possible duplicate de System.arraycopy() de Java est-il efficace pour les petits tableaux?
0 votes
Qu'est-ce qu'une "boucle for rapide" ?
0 votes
@CiroSantilli une expression ne signifiant rien de spécifique. "Une [boucle for rapidement écrite avec l'aide de l'IDE] était un peu trop longue.
0 votes
@Daren merci pour la réponse. J'ai supprimé le terme "rapide" si ça ne te dérange pas, car ce n'est pas un terme Java spécifique, et je trouve que la question est plus claire sans.
0 votes
@CiroSantilli d'accord pour moi, peut-être que ce n'est pas exactement la même chose qui est transmise, car je trouve une boucle for plus rapide et plus facile à écrire et à lire que d'utiliser System.arraycopy(...) mais si vous pensez que d'autres peuvent trouver le terme confus comme vous l'avez fait, alors la question est mieux sans lui.