l'ajout de Entier des objets à un hashSet
Considérons le code suivant:
6. Set<Integer> set = new HashSet<Integer>();
7. Integer i1 = 45;
8. Integer i2 = 46;
9. set.add(i1);
10. set.add(i1);
11. set.add(i2); System.out.print(set.size() + " ");
12. set.remove(i1); System.out.print(set.size() + " ");
13. i2 = 47;
14. set.remove(i2); System.out.print(set.size() + " ");
15. System.out.println(set.contains(i2));
Le code de sorties:
2 1 1 false
Après la ligne 14, je suppose que la taille serait 0
mais il est 1
. Je suppose qu'un nouvel objet i2
est ajouté à l'ensemble de la ligne 13, j'ai donc testé qu'à la ligne 15, mais il renvoie false
(j'.e n i2
existe dans le jeu), pourquoi est-ce?
Vous n'êtes pas la modification de la
i2
c'est dans le jeu. Vous êtes à la modification de la référence i2
; 46
sera toujours dans le jeu.OriginalL'auteur Java Player | 2012-09-02
Vous devez vous connecter pour publier un commentaire.
Vous n'avez jamais réellement enlever quoi que ce soit à partir de l'ensemble sur la ligne 14, parce que vous réaffectez
i2
de la ligne précédente à quelque chose de différent qui n'est pas dans le jeu. Essayez de voir ce qui se passe lorsque vous supprimez la ligne 13 au total.P. S. La méthode remove d'un ensemble réellement renvoie un booléen, donc vous pouvez utiliser
System.out.println(set.remove(i2))
pour voir sii2
était vraiment supprimé.OriginalL'auteur arshajii
[45,46]
->Remove 45
->[46]
->Remove 47
->[46]
47 n'est pas présent. Aussi lorsque vous affectez i2 avec l'autoboxing référence est modifiée mais hashset contient toujours l'ancienne valeur.OriginalL'auteur Amit Deshpande
1. Un Ensemble maintient la UNICITÉ de données.
De sorte que le
set
après l'addition de toutes les données a étéVoir cette trace...
[46]
[46]
//as i2 = 47, but you didn't add it to the set
alors maintenant que
i2 = 47
son pas dans le jeu, de sorte que son faux.OriginalL'auteur Kumar Vivek Mitra