Java >> Tutoriel Java >  >> Tag >> HashMap

Différences entre HashMap et LinkedHashMap en Java

HashMap contre LinkedHashMap

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

LinkedHashMap en Java

  • Cette classe est disponible dans le package java.util.
  • LinkedHashMap est une classe enfant de HashMap .
  • LinkedHashMap est une classe d'implémentation de l'interface Map.
  • La structure de données sous-jacente est une combinaison de Hashtable et LinkedList.
  • Dans LinkedHashMap , "l'ordre d'insertion des éléments est préservé" cela signifie que l'ordre d'insertion des éléments doit être le même que l'ordre de récupération des éléments.
  • Dans LinkedHashMap , "les valeurs en double sont autorisées mais les clés ne sont pas autorisées".
  • Cette classe est introduite dans la version 1.4.
  • Nous devrions opter pour LinkedHashMap où l'ordre d'insertion de l'élément est important.

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, null=10000} et si nous récupérons les éléments donc 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 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 {Java=1000, C=2000, C++ =3000, Ruby=4000, Python=1000, null=10000, Django=null}(c'est-à-dire que l'ordre d'insertion et de récupération sera le même car l'ordre d'insertion est préservé).

// Java program to demonstrate the behavior of LinkedHashMap
import java.util.Collection;
import java.util.LinkedHashMap;

class LinkedHashMapClass {
    public static void main(String[] args) {
        // Creating an instance of LinkedHashMap
        LinkedHashMap lhm = new LinkedHashMap();

        //By using put() method to add some values in LinkedHashMap
        lhm.put("Java", 1000);
        lhm.put("C", 2000);
        lhm.put("C++", 3000);
        lhm.put("Ruby", 4000);
        lhm.put("Python", 1000);
        lhm.put("null", null);
        lhm.put("Django", null);

        /* Here one null will be accepted for keys */
        lhm.put("null", 10000);

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

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

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

Sortie

E:\Programs>javac LinkedHashMapClass.java

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

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

HashMap en Java

  • Cette classe est également disponible dans le package java.util.
  • HashMap est une classe parente de LinkedHashMap .
  • HashMap est une classe d'implémentation de l'interface Map.
  • La structure de données sous-jacente est une combinaison de Hashtable.
  • Dans HashMap , "l'ordre d'insertion des éléments n'est pas conservé", ce qui signifie que l'ordre d'insertion des éléments n'a pas besoin d'être le même que l'ordre de récupération des éléments.
  • Dans HashMap , "les valeurs en double sont autorisées mais les clés ne sont pas autorisées".
  • Cette classe est introduite dans la version 1.2.
  • Nous devrions opter pour HashMap où l'ordre d'insertion de l'élément n'est pas important.

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, null=7000} et si nous récupérons les éléments donc l'ordre de récupération des éléments peut être différent (c'est-à-dire que l'ordre d'insertion n'est pas conservé et 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=7000, 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);

        // Here we will not get any error but one null is accepted for keys
        hm.put("null", 7000);

        // 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=7000, Java=1000}
Current HashMap Key values is :[4000, 2000, null, 1000, 3000, 7000, 1000]

Balise Java