7
votes

Java: comment définir un tableau avec un autre tableau?

Je suis très nouveau dans Java, et j'aimerais vos entrées.

Donc, j'ai un tableau:

for (int i = 0; i < names.length; i++) {
    allNames[i] = names[i];
}
for (int i = 0; i < newNames.length; i++}
    allNames[i + names.length] = newNames[i];
}

Et je les combine à travers:

String[] names = {"Anna", "Jo"};
String[] newNames = {"Bob", "Sue", "Jane"};
int totalLength = names.length + newNames.length;
String[] allNames = new String[totalLength];

Ma question est de savoir comment définir le tableau allNames dans le tableau des noms d'origine? Comme, les noms seraient «Anna», «Jo», «Bob», «Sue», «Jane». Je sais qu'il existe des méthodes qui peuvent faire cela, mais comment le feriez-vous manuellement?


4 commentaires

Veuillez ajouter une balise Java à cette question


@jjj Désolé, j'ai maintenant ajouté la balise java


Voulez-vous dire names = allNames; ?


@ vincrichaud Oh, c'est aussi simple que ça? Wow, j'ai peut-être oublié que OTL


5 Réponses :


6
votes
  1. Attribuez simplement allNames aux noms :
  2. [Anna, Jo, Bob, Sue, Jane]
    
    1. Ou utilisez simplement la méthode clone :
            names = Arrays.stream(allNames).toArray(String[]::new);
            System.out.println(Arrays.toString(names));
    
    1. Ou utilisez Arrays.copyOf:
            names = new String[allNames.length];
            System.arraycopy(allNames, 0, names, 0, allNames.length);
            System.out.println(Arrays.toString(names));
    
    1. Ou utilisez System.arraycopy:
            names = Arrays.copyOf(allNames, allNames.length);
            System.out.println(Arrays.toString(names));
    
    1. Ou avec Java 8:
            names = allNames.clone();
            System.out.println(Arrays.toString(names));
    

    Toutes les variantes feront le travail:

            names = allNames;
            System.out.println(Arrays.toString(names));
    

    Cependant, en utilisant la première manière, vous pointerez simplement la référence de names à allNames . Toutes les autres variantes - un nouveau tableau sera créé et rempli avec les valeurs allNames . Le dernier comportement est généralement préférable.


0 commentaires

9
votes

La première option et préférée est:

name = newName;

La deuxième pourrait être ce que vous faites, ajoutez simplement:

name = (String[])ArrayUtils.addAll(names, newNames);

après pour les boucles .


0 commentaires

1
votes

En général, les tableaux ont une taille fixe. Lorsque vous redimensionnez un tableau, vous copiez toutes les données dans un nouveau. Il n'y a donc aucun moyen de le faire lorsque vous ne les initiez pas avec une taille plus grande. Les méthodes des autres réponses feront probablement ce que vous voulez, mais elles ne développent pas votre tableau d'origine.


0 commentaires

2
votes

Il existe la classe Arrays qui fournit des fonctions telles que la copie. Les programmeurs Java rechercheront généralement le javadoc sur le Web, ou peut-être dans l'EDI.

La réponse serait:

List<String> names = new ArrayList<>();
Collections.addAll(names, "Anna", "Jo");

List<String> newNames = Arrays.asList("Bob", "Sue", "Jane");
List<String> allNames = new ArrayList(names);
allNames.addAll(newNames);

Mais travailler ainsi est assez inefficace, échanger un tableau entier valeurs.

Dans ce cas, comme dans java les tableaux sont de taille fixe, on utiliserait une liste ou un ensemble dynamique (pour les éléments uniques):

names = allNames;

p >


0 commentaires

1
votes
Les tableaux

, en Java, sont des objets. Ainsi, définir simplement names = allNames les fait pointer vers le même objet (pas des copies identiques séparées). En d'autres termes, si vous deviez changer "Sue" en "Suzy" dans l'un, cela le changerait dans l'autre. C'est la manière la plus simple et la plus efficace de le faire, en supposant que vous n'ayez pas besoin de les utiliser séparément.


0 commentaires