Java ArrayList copie
J'ai un ArrayList
l1
de taille 10. - Je attribuer l1
à la nouvelle liste de référence de type l2
. Va l1
et l2
point de même ArrayList
objet? Ou une copie de la ArrayList
un objet affecté à l2
?
Lors de l'utilisation de la l2
de référence, si je mettre à jour la liste objet, il reflète les changements dans l1
type de référence aussi.
Par exemple:
List<Integer> l1 = new ArrayList<Integer>();
for (int i = 1; i <= 10; i++) {
l1.add(i);
}
List l2 = l1;
l2.clear();
Est-il pas d'autre moyen pour attribuer une copie d'une liste d'objet à une nouvelle variable de référence, à part la création de 2 objets de la liste, et de faire des copier sur les collections de l'ancien au nouveau?
Vous devez vous connecter pour publier un commentaire.
Oui, l'attribution de juste copier le valeur de
l1
(qui est une référence) àl2
. Ils seront tous deux font référence au même objet.La création d'une copie est assez facile cependant:
(Tout comme un exemple.)
List.subList
pour obtenir une "vue" sur une section de la liste d'origine.(ArrayList<ArrayList<Object>>)
? serait-ce de manière récursive pour créer des copies de tous les enfants ArrayList d'objets?Set<Integer> newSet = new HashSet<Integer>(oldList);
Essayez d'utiliser
Collections.copier(destination, source);
new ArrayList<>(source);
?Collections.copy
n'est pas du tout une alternative ànew ArrayList<>(source)
. CeCollections.copy
a supposer quedestination.size()
est au moins aussi grand quesource.size()
, puis copier la plage de l'indice par l'indice à l'aide de laset(int,E)
méthode. La méthode n'a pas add de nouveaux éléments à la destination. Consulter le code source si c'est pas assez clair à partir de la Javadoc.Oui
l1
etl2
va point à la même référence, même objet.Si vous souhaitez créer une nouvelle liste de tableaux sur la base des autres ArrayList pour ce faire:
Le résultat sera
l1
aura encore 2 éléments etl2
aura 3 éléments.List<String> l2 = new ArrayList<String>(l1)
etList<String> l2 = l1
?Un autre moyen pratique pour copier les valeurs de la src ArrayList pour dest Arraylist est comme suit:
C'est la copie de valeurs et pas seulement la copie de référence.
Il existe une méthode addAll() qui servira le but de copier Une liste de tableaux à l'autre.
Par exemple, vous avez deux Tableau liste: sourceList et targetList, utilisez code ci-dessous.
targetList.addAll(sourceList);
Java ne passe pas des objets, il transmet les références (pointeurs) à des objets. Donc oui, l2 et l1 sont deux pointeurs vers le même objet.
Que vous avez à faire une copie explicite si vous avez besoin de deux différents avec le même contenu.