Java >> Tutoriel Java >  >> Tag >> class

Différences entre les classes HashSet et HashMap en Java

HashMap contre HashSet

Tout d'abord, nous verrons comment HashMap diffère de HashSet en Java ?

HashMap

  • Cette classe est disponible dans le package java.util.
  • Cette classe est une classe d'implémentation de l'interface Map.
  • HashMap est une classe parente de LinkedHashMap.
  • La structure de données sous-jacente de HashMap est Hashtable.
  • Dans HashMap, "l'ordre d'insertion n'est pas conservé" car il est basé sur le HashCode des clés (c'est-à-dire que l'ordre d'insertion n'a pas besoin d'être le même que l'ordre de récupération).
  • Dans HashMap, l'objet est représenté sous la forme de clés et de valeurs où "les clés en double ne sont pas autorisées" mais les " valeurs en double sont autorisées".
  • Dans HashMap, null peut être inséré à la fois pour les clés et les valeurs, mais nous pouvons insérer "null" une fois pour les clés et nous pouvons insérer "null" plusieurs fois pour les valeurs.
  • Dans HashMap, les objets hétérogènes sont autorisés pour les clés et les valeurs.

Exemple :

Supposons que nous ayons un HashMap avec peu d'éléments. Ici, nous ajoutons les éléments dans l'ordre {Java=1000, C=2000, C++=3000, Ruby=4000, Python=1000, null=null, Django=null} et si nous récupérons les éléments, l'ordre de la récupération des éléments peut être différente (c'est-à-dire qu'il n'est pas nécessaire que ce soit le même ordre d'insertion et de récupération des éléments.) donc la sortie sera différente et l'ordre sera comme {Ruby=4000, C=2000, Django=null, Python =1000, C++=3000, null=null, Java=1000}

// Java program to demonstrate the behavior of HashMap

import java.util.Collection;
import java.util.HashMap;

class HashMapClass {
    public static void main(String[] args) {
        // Creating an instance of HashMap
        HashMap hm = new HashMap();

        //By using put() method to add some values in HashMap
        hm.put("Java", 1000);
        hm.put("C", 2000);
        hm.put("C++", 3000);
        hm.put("Ruby", 4000);
        hm.put("Python", 1000);
        hm.put("null", null);
        hm.put("Django", null);
        // hm.put("null",null); Here we will not get any error 
        // but one null is accepted for keys

        // Display retrieval order of HashMap
        System.out.println("Current HashMap list is :" + hm);

        // by using values() to find values of HashMap
        Collection values = hm.values();

        // Display Values of HashMap
        System.out.println("Current HashMap Key values is :" + values);
    }
}

Sortie

E:\Programs>javac HashMapClass.java

E:\Programs>java HashMapClass
Current HashMap list is :{Ruby=4000, C=2000, Django=null, 
Python=1000, C++=3000, null=null, Java=1000}
Current HashMap Key values is :[4000, 2000, null, 1000, 3000, null, 1000].

Deuxièmement, nous verrons comment HashSet diffère de HashMap en Java ?

HashSet

  • Cette classe est disponible dans le package java.util.
  • Cette classe est une classe d'implémentation de l'interface Set.
  • HashSet est une classe parente de LinkedHashSet.
  • La structure de données sous-jacente de HashSet est Hashtable.
  • Dans HashSet, "l'ordre d'insertion n'est pas conservé" (c'est-à-dire qu'il n'est pas nécessaire que l'ordre d'insertion soit identique à l'ordre de récupération).
  • Dans HashSet "les valeurs en double ne sont pas autorisées".
  • Dans HashSet, null peut être inséré pour les valeurs.
  • Dans HashSet, les objets hétérogènes sont autorisés.

Exemple :

Supposons que nous ayons un HashSet avec peu d'éléments. Ici, nous ajoutons les éléments dans l'ordre est [1000, 2000, 3000, 4000, null] et si nous récupérons les éléments, l'ordre de récupération des éléments peut être différent (c'est-à-dire qu'il n'est pas nécessaire que ce soit la même insertion et récupération l'ordre des éléments.) donc la sortie sera différente et l'ordre sera comme [null, 1000, 2000, 3000, 4000]

import java.util.*;

class HashSetClass {
    public static void main(String[] args) {
        // Creating an instance of HashSet
        HashSet hs = new HashSet();

        //By using add() method to add some values in HashSet
        hs.add(1000);
        hs.add(2000);
        hs.add(3000);
        hs.add(4000);
        hs.add(null);
        // hs.add(2000); here we will not get any error or exception 
        // it will be ignored

        // Display retrieval order of HashSet
        System.out.println("Current HashSet list is :" + hs);
    }
}

Sortie

E:\Programs>javac HashSetClass.java

E:\Programs>java HashSetClass
Current HashSet list is :[null, 1000, 2000, 3000, 4000]

Balise Java