Comment utiliser les tableaux Java.sorte


J'apprends comment Arrays.sort(...) fonctionne en Java.

Pourquoi les variables: temp et dopas sont-elles toutes deux triées après le seul tri temp?

System.out.println("Before");
for (int i = 0; i < POP; i++)
  System.out.println(dopas[i]+"");           //dopas is unsorted

System.out.println("After");
float[] temp=dopas;
Arrays.sort(temp);                           //sort temp

for (int i = 0; i < POP; i++)
  System.out.println(temp[i]+" "+dopas[i]);  //Both temp and dopas are now sorted

Je m'attendais à ce que dopas reste non trié.

Author: Eric Leschinski, 2011-08-29

13 answers

Les tableaux sont des objets en Java, donc lorsque vous utilisez des variables de tableau, vous utilisez en fait des références à des tableaux.

Donc la ligne

float[] temp=dopas;

Ne copiera que la référence dans le tableau dopas. Ensuite, dopas et temp pointent vers le même tableau, donc les deux apparaîtront triés après avoir utilisé sort().

Utiliser System.arrayCopy ou Arrays.copyOf pour créer une copie du tableau.

 22
Author: sleske, 2011-08-29 14:40:15

Votre affectation: float[] temp=dopas; ne fait que copier une référence au tableau. Ce que je pense que vous voulez faire est float[] temp = dopas.clone();

 7
Author: Dogmatixed, 2011-08-29 13:55:46

temp est tout simplement une référence à dopas. Il n'y a en fait qu'un seul tableau en mémoire.

Si vous voulez temp pour être une copie de dopas, essayez:

float[] temp = Arrays.copyOf(dopas, dopas.length);

De cette façon, vous allez copier en profondeurvotre tableau au lieu de copier en profondeur!

 6
Author: Jean Logeart, 2011-08-29 13:58:26

Car en Java, vous accédez aux tableaux par référence, pas par valeur.

Donc temp et dopas sont toutes deux des références au même tableau.

 3
Author: Oliver Charlesworth, 2011-08-29 13:53:26

Pourquoi après le tableau.trier les deux tableaux sont triés?

Car il n'y a qu'un seul tableau. float[] temp=dopas; ne crée pas de nouveau tableau ni ne copie le contenu des tableaux existants. Il copie simplement un tableau référence ... pour que vous ayez la référence au même tableau à deux endroits.

 3
Author: Stephen C, 2011-08-29 13:53:53

Lorsque vous attribuez à temp la valeur de dopas, il ne fait pas de copie, il fait référence aux variables au même tableau.

 2
Author: pholser, 2011-08-29 13:53:43

Parce que temp et dopas (ce que nous appelons une variable) sont des pointeurs vers un espace en mémoire. En utilisant le code

float[] temp = dopas

Vous dites simplement que "temp" pointe vers le même espace en mémoire que dopas. Le résultat est donc que vous avez deux pointeurs vers le même espace en mémoire. Et en triant temp, vous triez le contenu de cet espace, donc en référençant dopas plus tard dans votre code, vous accédez exactement aux mêmes données.

PS: Dogmatixed a mentionné une solution à votre problème.

 2
Author: Chris, 2011-08-29 13:55:25

Parce que les deux tableaux temp et dopas sont les mêmes. Assignment temp=dopas; attribue une référence au tableau. Il ne copie pas son contenu. C'est la raison pour laquelle lorsque vous triez le premier vous de tri la seconde de trop.

 1
Author: AlexR, 2011-08-29 13:54:19

dopas et temp font référence au même tableau et peuvent être utilisés de manière interchangeable.

float[] temp=dopas;

Après cette ligne, temp[i] sera exactement le même que dopas[i].

 1
Author: Gabriel Negut, 2011-08-29 13:54:32

Parce que temp et dopas sont deux références au même tableau

 1
Author: Emmanuel Bourg, 2011-08-29 13:55:23

Temp fait référence à dopas ,donc quand dopas est trié, temp aussi.Ils pointent en fait vers le même tableau.espérons que cette aide.

 1
Author: ashutosh raina, 2011-08-29 13:59:16

Temp et dopas partagent le même pointeur, puisque vous ne créez pas de nouvelle instance de tableau, vous affectez simplement le même pointeur.

 0
Author: Cygnusx1, 2011-08-29 13:54:21

temp et dopas font référence à la même matrice.

Si vous voulez que temp agisse comme un nouveau tableau, utilisez la méthode clone().

float[] temp = dopas.clone();

La méthode Clone() crée un nouveau tableau et copie le contenu du dopas dans le tableau nouvellement créé.

 0
Author: ram914, 2017-09-03 05:03:12