Car nous savons qu’un ensemble est une collection bien définie d’objets distincts. Chaque membre d’un ensemble est appelé un élément de l’ensemble. En d’autres termes, nous pouvons dire qu’un ensemble ne contiendra jamais d’éléments en double. Mais comment l’interface Java Set a implémenté des classes comme HashSet, LinkedHashSet, TreeSet, etc. réalisez cette unicité. Dans cet article, nous discuterons de la vérité cachée derrière cette unicité.
Comment fonctionne HashSet en interne en Java ?
Attention lecteur! N’arrête pas d’apprendre maintenant. Mettez la main sur tous les concepts importants de la Fondation et des collections Java avec les fondamentaux de Java et le cours de collections Java à un prix convivial pour les étudiants et devenez prêt pour l’industrie. Pour compléter votre préparation de l’apprentissage d’une langue à DS Algo et bien d’autres, veuillez vous référer au Cours complet de préparation à l’entretien.
Nous le comprendrons avec un exemple.Voyons la sortie du programme suivant qui essaie d’ajouter des éléments en double dans un HashSet.
import
java.util.HashSet;
class
Test
{
public
static
void
main(String args)
{
HashSet hs =
new
HashSet();
boolean
b1 = hs.add(
"Geeks"
);
boolean
b2 = hs.add(
"GeeksforGeeks"
);
boolean
b3 = hs.add(
"Geeks"
);
System.out.println(
"b1 = "
+b1);
System.out.println(
"b2 = "
+b2);
System.out.println(
"b3 = "
+b3);
System.out.println(hs);
}
}
Sortie:
b1 = trueb2 = trueb3 = false
Maintenant, à partir de la sortie, il est clair que lorsque nous essayons d’ajouter un élément en double à un ensemble en utilisant la méthode add(), il renvoie false, et l’élément n’est pas ajouté à hashset, car il est déjà présent. Maintenant, la question vient, comment la méthode add() vérifie si l’ensemble contient déjà l’élément spécifié ou non. Ce sera plus clair si nous examinons de plus près la méthode add() et le constructeur par défaut dans la classe HashSet.
// predefined HashSet classpublic class HashSet{ // A HashMap object private transient HashMap map; // A Dummy value(PRESENT) to associate with an Object in the Map private static final Object PRESENT = new Object(); // default constructor of HashSet class // It creates a HashMap by calling // default constructor of HashMap class public HashSet() { map = new HashMap(); } // add method // it calls put() method on map object // and then compares it's return value with null public boolean add(E e) { return map.put(e, PRESENT)==null; } // Other methods in Hash Set}
Maintenant, comme vous pouvez le voir, chaque fois que nous créons un HashSet, il crée en interne un HashMap et si nous insérons un élément dans ce HashSet en utilisant la méthode add(), il appelle en fait la méthode put() sur l’objet HashMap créé en interne avec l’élément que vous avez spécifié comme clé et l’objet constant appelé « PRÉSENT » comme valeur. Nous pouvons donc dire qu’un ensemble atteint l’unicité en interne via HashMap. Maintenant, toute l’histoire tourne autour du fonctionnement interne d’une méthode HashMap et put().
Comme nous le savons dans un HashMap, chaque clé est unique et lorsque nous appelons la méthode put(Key, Value), elle renvoie la valeur précédente associée à key, ou null s’il n’y avait pas de mappage pour key. Donc, dans la méthode add(), nous vérifions la valeur de retour de map.méthode put (key, value) avec une valeur nulle.
- Si carte.put(clé, valeur) renvoie null, puis l’instruction « map.put(e, PRESENT) == null » retournera true et l’élément est ajouté au HashSet (HashMap interne).
- Si carte.put(key, value) renvoie l’ancienne valeur de la clé, puis l’instruction « map.put(e, PRESENT) == null » retournera false et l’élément n’est pas ajouté au HashSet (HashMap interne).
Comme LinkedHashSet étend HashSet, il appelle donc en interne les constructeurs de HashSet en utilisant super(). De même, la création d’un objet de classe TreeSet crée en interne un objet de carte navigable en tant que carte de support.
Article connexe: Comment fonctionne HashMap en interne en Java.
Cet article est rédigé par Gaurav Miglani. Si vous aimez GeeksforGeeks et souhaitez contribuer, vous pouvez également écrire un article en utilisant contribute.geeksforgeeks.organisez ou envoyez votre article à [email protected] . Consultez votre article apparaissant sur la page principale de GeeksforGeeks et aidez d’autres Geeks.