0
votes

Hashmap a mis la même valeur

Je veux juste demander pourquoi mon hashmap code> insère la même valeur même si je le pose à l'intérieur d'une boucle?

val parentMap = HashMap<String, Any?>()
val map = HashMap<String, Any?>()
orders.forEachIndexed { i, order ->
   map["id"] = order.id
   map["productName"] = order.productName
   map["quantity"] = order.quantity
   Log.i(TAG, "order=$order")
   parentMap["data$i"] = map
   Log.i(TAG, "map=$parentMap") // This parent map contains a same value from map...
}
Log.i(TAG, "map=$parentMap")


1 commentaires

Mettez la carte val = hashmap () boucle intérieure


4 Réponses :


0
votes

Donc, ce que vous faites ici consiste à attribuer l'objet de la carte à votre carte mère. La carte mère stocke l'objet de la carte dans son ensemble au lieu des données. Vous devrez créer une nouvelle "carte" dans chaque itération.


0 commentaires

0
votes

Je pense que "carte" peut être une variable de référence. donc il insérera les mêmes valeurs


0 commentaires

0
votes

Pour résumer ce que tout le monde a dit ici.

dans Java et Kotlin Tous les objets stockés dans un tas et toutes vos variables stockent uniquement références aux objets dans le tas:

Lorsque vous faites ceci: parentmap ["Data $ i"] = mappe

Votre clé, ex: data1 , data2 < / Code>, data3 ... Pointera une instance de la même carte que vous avez créée ici: Val Map = HashMap () . < / p>

donc tout ce que vous faites à votre carte: xxx

ne change qu'une seule carte que vous avez.

Pour résoudre ce problème. Mettez votre création de carte dans la boucle. Ou je vous suggère d'utiliser un style immuable comme: xxx


0 commentaires

0
votes

Vous créez l'objet de la carte en dehors de la boucle.

VAL MAP = HASHMAP ()

Donc, il créera une entrée de carte unique où vous avez besoin d'une carte différente pour la carte mère.

Maintenant, vous entrez des valeurs différentes sur votre carte, mais que toutes les références de cartes sont maintenant dirigées vers le même objet de la carte afin que toutes les cartes de votre carte mère afficheront les dernières entrées apportées à la carte.

La solution consiste à garder Val Map = Hashmap () à l'intérieur de la boucle. Donc, avec chaque itération, différents objets de carte seront créés entraînant différentes données selon les itérations.


0 commentaires