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

Différences entre les classes Hashtable et HashMap en Java

HashMap contre HashSet

Ici, nous verrons en quoi Hashtable diffère de HashMap en Java ?

Classe table de hachage

  • Hashtable est une classe disponible dans le package java.util.
  • Dans Hashtable, chaque méthode de la classe est synchronisée afin de fournir la sécurité des threads.
  • Hashtable est Thread Safe (c'est-à-dire qu'un seul thread est autorisé à fonctionner sur l'objet Hashtable à la fois).
  • Dans Hashtable, un thread fonctionne sur un objet Hashtable à la fois, ce qui prend plus de temps pour terminer la tâche ou, en d'autres termes, nous pouvons dire que cela augmente le temps d'attente du thread.
  • Dans le cas de Hashtable, les performances sont faibles simplement en raison du temps d'attente plus long du thread.
  • Nous pouvons insérer null pour les clés et les valeurs.
  • Hashtable est une classe héritée car cette classe est introduite dans la version antérieure 1.0 de Java. Cette classe doit donc être repensée pour prendre en charge la collecte lorsque le cadre de collecte est arrivé.
  • Hashtable ne fournit pas entièrement l'unicité (c'est-à-dire que les doublons ne sont pas autorisés pour les clés et les doublons sont autorisés pour les valeurs).
  • Dans l'insertion de table de hachage, l'ordre n'est pas conservé (c'est-à-dire que l'ordre d'insertion et de récupération n'a pas besoin d'être le même).

Exemple :

import java.util.Hashtable;

class HashTableClass {
    int hashcode;

    // class constructor to instantiate hashcode
    HashTableClass(int hashcode) {
        this.hashcode = hashcode;
    }

    // override hashCode()
    public int hashCode() {
        return hashcode;
    }

    // override toString() for string conversion
    public String toString() {
        return hashcode + " ";
    }

    public static void main(String[] args) {
        // Creating an instance 
        Hashtable ht = new Hashtable();

        // By using put() to add few objects in Hashtable 
        ht.put(new HashTableClass(10), "Java");
        ht.put(new HashTableClass(3), "C");
        ht.put(new HashTableClass(4), "C++");
        ht.put(new HashTableClass(3), "Ruby");
        ht.put(new HashTableClass(5), "C");
        ht.put(new HashTableClass(6), "null");

        // Display Current Hashtable
        System.out.println("Current Hashtable is :" + ht);
    }
}

Sortie

E:\Programs>javac HashTableClass.java

E:\Programs>java HashTableClass
Current Hashtable is :{10 =Java, 6 =null, 5 =C, 4 =C++, 3 =Ruby, 3 =C}

Ici, nous verrons comment HashMap diffère de Hashtable en Java ?

HashMap

  • HashMap est une classe disponible dans le package java.util.
  • Dans HashMap, aucune méthode de la classe n'est synchronisée, de sorte qu'elle ne fournit pas la sécurité des threads.
  • HashMap n'est pas Thread Safe (c'est-à-dire que plusieurs threads sont autorisés à fonctionner sur l'objet Hashtable à la fois).
  • Dans HashMap, plusieurs threads fonctionnent sur un objet Hashtable à la fois, ce qui prend moins de temps pour terminer la tâche ou, en d'autres termes, nous pouvons dire que cela diminue le temps d'attente du thread.
  • Dans le cas de HashMap, les performances sont élevées simplement parce que le fil prend moins de temps d'attente.
  • Nous pouvons insérer null pour les clés (une fois) et les valeurs (plusieurs fois).
  • HashMap n'est pas une classe héritée, car cette classe a été introduite dans la version ultérieure 1.2 de Java. Cette classe n'a donc pas besoin d'être repensée pour prendre en charge la collecte lors de l'arrivée du framework de collecte.
  • HashMap ne fournit pas entièrement l'unicité (c'est-à-dire que les doublons ne sont pas autorisés pour les clés et les doublons sont autorisés pour les valeurs).
  • Dans HashMap, l'ordre d'insertion n'est pas conservé (c'est-à-dire que l'ordre d'insertion et de récupération n'a pas besoin d'être le même).

Exemple :

// Java program to demonstrate the behavior of Map

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 Map
        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