2009-10-23 5 views
1

Dans ma classe, j'ai une méthode qui retourne un tableau comme celui-ci.Retour du tableau à partir de la méthode

double arrValues[] = ClassX.getValues(); 

Je me demande si la taille du tableau a une influence sur les performances. Existe-t-il une opération de copie pour arrValues ​​[] ou s'agit-il seulement d'une référence?

+0

Votre méthode statique devrait renvoyer une nouvelle copie du tableau (sauf si elle est de longueur zéro). –

Répondre

3

En Java, les types d'objet sont renvoyés par référence et les types primitifs sont renvoyés par valeur. Les tableaux sont des objets complets en Java. Par conséquent, dans votre exemple, le tableau est renvoyé par référence et aucune copie n'est effectuée.

+0

+1 pour _why_ c'est une référence plutôt que de simplement dire que c'est une référence –

3

C'est seulement une référence (comme tout sauf les types de base long, int, short, ...) dans java est une référence unique).

3

Il n'y a pas d'information sur le coût de construction de la matrice (à quel point la taille est inconnue).

En dehors de cela, ce qui est retourné est juste une référence au tableau construit en getValues(), de sorte que l'acte de retour le tableau n'a pas de réel impact sur les performances.

+0

En l'absence d'assistance matérielle, et en supposant un bon GC, le coût amorti de l'allocation d'un tableau de mots N correspond aux écritures de mémoire 'O (N)' requises pour le mettre à zéro. –

+0

Je pense que je sais ce que vous voulez dire, et je ne suis pas en désaccord. Cependant, nous ne savons pas ce que fait l'implémentation de getValues ​​(). Le «coût» dont je parlais ne faisait pas référence au coût de «nouveau tableau [X]», mais plutôt au coût de calcul des «valeurs» qui entrent dans le tableau. Comment ces échelles ... Je ne sais pas. Cependant, ce n'est peut-être pas la question que pose l'OP ... –

+0

getValues ​​() ne renvoie que le tableau déjà construit auparavant. Je voulais demander seulement le coût de retourner le tableau. – penguru

Questions connexes