J'ai un ArrayList
l1
de taille 10. J'attribue l1
au nouveau type de référence de liste l2
. Est-ce que l1
et l2
désigneront le même objet ArrayList
? Ou une copie de l'objet ArrayList
est-elle affectée à l2
?
Lors de l'utilisation de la référence l2
, si je mets à jour l'objet liste, il reflète également les modifications apportées au type de référence l1
.
Par exemple:
List<Integer> l1 = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
l1.add(i);
}
List l2 = l1;
l2.clear();
N'y a-t-il pas d'autre moyen d'affecter une copie d'un objet de liste à une nouvelle variable de référence, mis à part la création de 2 objets de liste et la copie sur des collections d'ancien à nouveau?
Oui, l'affectation copiera simplement le valeur de l1
(qui est une référence) dans l2
. Ils feront tous deux référence au même objet.
Créer une copie superficielle est assez facile cependant:
List<Integer> newList = new ArrayList<>(oldList);
(Juste à titre d'exemple.)
Essayez d'utiliser Collections.copy(destination, source);
Oui l1
et l2
pointeront vers la même référence, le même objet.
Si vous voulez créer une nouvelle ArrayList basée sur l'autre ArrayList, procédez comme suit:
List<String> l1 = new ArrayList<String>();
l1.add("Hello");
l1.add("World");
List<String> l2 = new ArrayList<String>(l1); //A new arrayList.
l2.add("Everybody");
Le résultat sera l1
aura toujours 2 éléments et l2
aura 3 éléments.
Voici un autre moyen pratique de copier les valeurs de src ArrayList vers arraylist:
ArrayList<String> src = new ArrayList<String>();
src.add("test string1");
src.add("test string2");
ArrayList<String> dest= new ArrayList<String>();
dest.addAll(src);
Ceci est une copie réelle des valeurs et pas seulement une copie de la référence.
Il existe une méthode addAll () qui servira à copier One ArrayList dans un autre.
Par exemple, vous avez deux listes de tableaux: sourceList et targetList , utilisez ci-dessous code.
targetList.addAll (sourceList);
Java ne transmet pas d’objets, il transmet des références (pointeurs) aux objets. Donc oui, l2 et l1 sont deux pointeurs sur le même objet.
Vous devez faire une copie explicite si vous avez besoin de deux listes différentes avec le même contenu.