open - java util hashmap put




Différences entre HashMap et Hashtable? (20)

1. Hashmap et HashTable stockent la clé et la valeur.

2. Hashmappeut stocker une clé comme null. Hashtablene peut pas stocker null.

3. HashMapn'est pas synchronisé mais Hashtableest synchronisé.

4. HashMappeut être synchronisé avecCollection.SyncronizedMap(map)

Map hashmap = new HashMap();

Map map = Collections.SyncronizedMap(hashmap);

Quelles sont les différences entre HashMap et Hashtable en Java?

Qu'est-ce qui est plus efficace pour les applications non-threadées?


Basé sur l'info here , je vous recommande d'aller avec HashMap. Je pense que le plus gros avantage est que Java vous empêchera de le modifier pendant que vous le parcourez, à moins que vous ne le fassiez par le biais de l'itérateur.


En plus de ce que HashMap dit, HashMap autorise les valeurs NULL, contrairement à Hashtable .

Notez également que Hashtable étend la classe Dictionary , qui, en tant Javadocs , est obsolète et a été remplacée par l'interface Map .


Hashtable est synchronisé, alors que HashMap ne l’est pas. Cela rend Hashtable plus lent que Hashmap.

Pour les applications non-threadées, utilisez HashMap car elles sont autrement identiques en termes de fonctionnalité.


Il y a beaucoup de bonnes réponses déjà postées. J'ajoute quelques nouveaux points et le résume.

HashMap et Hashtable sont tous deux utilisés pour stocker des données sous forme de clé et de valeur . Les deux utilisent la technique de hachage pour stocker des clés uniques. Mais il existe de nombreuses différences entre les classes HashMap et Hashtable présentées ci-dessous.

HashMap

  1. HashMap n'est pas synchronisé. Il n'est pas thread-safe et ne peut pas être partagé entre plusieurs threads sans code de synchronisation approprié.
  2. HashMap autorise une clé NULL et plusieurs valeurs NULL.
  3. HashMap est une nouvelle classe introduite dans JDK 1.2.
  4. HashMap est rapide.
  5. Nous pouvons rendre la HashMap synchronisée en appelant ce code
    Map m = Collections.synchronizedMap(HashMap);
  6. HashMap est traversé par Iterator.
  7. Iterator dans HashMap est rapide à la faillite.
  8. HashMap hérite de la classe AbstractMap.

Table de hachage

  1. Hashtable est synchronisé. Il est thread-safe et peut être partagé avec de nombreux threads.
  2. Hashtable n'autorise aucune clé ou valeur nulle.
  3. Hashtable est une classe héritée.
  4. Hashtable est lent.
  5. Hashtable est synchronisé en interne et ne peut pas être désynchronisé.
  6. Hashtable est parcouru par Enumerator et Iterator.
  7. L'énumérateur dans Hashtable n'est pas rapide.
  8. Hashtable hérite de la classe Dictionary.

Lectures supplémentaires Quelle est la différence entre HashMap et Hashtable en Java?


N'oubliez pas que HashTable était une classe héritée avant l'introduction de Java Collections Framework (JCF), qui a été ultérieurement adaptée pour implémenter l'interface Map . De même que Vector et Stack .

Par conséquent, restez toujours à l’écart de ceux-ci dans le nouveau code car il existe toujours une meilleure alternative dans le JCF, comme l’ont déjà souligné d’autres.

Voici la feuille de triche pour la collection Java que vous trouverez utile. Notez que le bloc gris contient les classes héritées HashTable, Vector et Stack.


Outre les différences déjà mentionnées, il convient de noter que depuis Java 8, HashMap remplace dynamiquement les nœuds (liste liée) utilisés dans chaque compartiment par TreeNodes (arbre rouge-noir), de sorte que même en cas de collisions de hachage élevées, lors de la recherche est

O (log (n)) pour HashMap Vs O (n) dans Hashtable .

* L'amélioration susmentionnée n'a pas encore été appliquée à Hashtable , mais uniquement à HashMap , LinkedHashMap et ConcurrentHashMap .

FYI, actuellement,

  • TREEIFY_THRESHOLD = 8 : si un TREEIFY_THRESHOLD = 8 contient plus de 8 noeuds, la liste liée est transformée en une arborescence équilibrée.
  • UNTREEIFY_THRESHOLD = 6 : lorsqu'un seau devient trop petit (en raison de la suppression ou du redimensionnement), l'arbre est reconverti en liste liée.

Outre tous les autres aspects importants déjà mentionnés ici, Collections API (par exemple, l'interface de carte) est en cours de modification constante pour se conformer aux "derniers et meilleurs" ajouts à la spécification Java.

Par exemple, comparez Java 5 Map itérant:

for (Elem elem : map.keys()) {
  elem.doSth();
}

par rapport à l'ancienne approche Hashtable:

for (Enumeration en = htable.keys(); en.hasMoreElements(); ) {
  Elem elem = (Elem) en.nextElement();
  elem.doSth();
}

En Java 1.8, on nous promet également de pouvoir construire et accéder à HashMaps comme dans de bons vieux langages de script:

Map<String,Integer> map = { "orange" : 12, "apples" : 15 };
map["apples"];

Mise à jour: Non, ils n'atterriront pas en 1.8 ... :(

Les améliorations de la collection de Project Coin seront-elles dans JDK8?


Regardez ce tableau. Il fournit des comparaisons entre différentes structures de données ainsi que HashMap et Hashtable. La comparaison est précise, claire et facile à comprendre.

Matrice de collection Java


Une autre différence essentielle entre hashtable et hashmap réside dans le fait qu'Iterator dans HashMap est ultra-rapide alors que l'énumérateur de Hashtable ne le fait pas et renvoie ConcurrentModificationException si un autre thread modifie la carte de manière structurelle en ajoutant ou en supprimant tout élément, à l'exception de la méthode de suppression () d'Iterator. Mais ce n'est pas un comportement garanti et JVM le fera de son mieux. "

Ma source: http://javarevisited.blogspot.com/2010/10/difference-between-hashmap-and.html


HashMap : implémentation de l'interface Map utilisant des codes de hachage pour indexer un tableau. Hashtable : Bonjour, 1998 appelé. Ils veulent récupérer leur API de collections.

Sérieusement, il vaut mieux rester loin de Hashtable . Pour les applications à un seul thread, vous n'avez pas besoin de la surcharge de la synchronisation. Pour les applications hautement concurrentes, la synchronisation paranoïaque peut entraîner la famine, des blocages ou des pauses inutiles dans la récupération de place. Comme Tim Howland l'a souligné, vous pouvez utiliser ConcurrentHashMap place.


HashMap et Hashtable présentent également des différences algorithmiques significatives. Personne n’en ayant déjà parlé, c’est la raison pour laquelle j’en parle. HashMap construira une table de hachage avec une taille de puissance deux, l'augmentera dynamiquement de manière à avoir au plus environ huit éléments (collisions) dans n'importe quel HashMap et HashMap très bien les éléments pour les types d'éléments généraux. Cependant, l’implémentation de Hashtable offre un contrôle plus précis et plus précis du hachage si vous savez ce que vous faites. En d’autres termes, vous pouvez corriger la taille de la table en utilisant, par exemple, le nombre premier le plus proche de la taille de votre domaine de valeurs, ce qui donnera de meilleures performances que HashMap, c’est-à-dire moins. des collisions dans certains cas.

À part les différences évidentes discutées de manière approfondie dans cette question, je considère la Hashtable comme une voiture à «entraînement manuel» où vous avez un meilleur contrôle du hachage et la HashMap comme l’équivalent «à l’entraînement automatique» qui fonctionnera généralement bien.


Hashtable est considéré comme du code hérité. Il n'y a rien dans Hashtable qui ne puisse pas être utilisé avec HashMap ou des dérivations de HashMap , aussi, pour le nouveau code, je ne vois aucune justification pour revenir à Hashtable .


Hashtable est similaire à HashMap et possède une interface similaire. Il est recommandé d'utiliser HashMap , sauf si vous avez besoin d'une prise en charge d'applications héritées ou d'une synchronisation, car les méthodes Hashtables sont synchronisées. Donc, dans votre cas, comme vous n'êtes pas multi-threading, HashMaps est votre meilleur pari.


Hashtable:

Hashtable est une structure de données qui conserve les valeurs de la paire clé-valeur. Il n'autorise pas la valeur null pour les clés et les valeurs. Vous obtiendrez un NullPointerExceptionsi vous ajoutez une valeur nulle. C'est synchronisé. Donc, cela vient avec son coût. Un seul thread peut accéder à HashTable à un moment donné.

Exemple :

import java.util.Map;
import java.util.Hashtable;

public class TestClass {

    public static void main(String args[ ]) {
    Map<Integer,String> states= new Hashtable<Integer,String>();
    states.put(1, "INDIA");
    states.put(2, "USA");

    states.put(3, null);    //will throw NullPointerEcxeption at runtime

    System.out.println(states.get(1));
    System.out.println(states.get(2));
//  System.out.println(states.get(3));

    }
}

HashMap:

HashMap est comme Hashtable mais accepte également les paires de valeurs clés. Il autorise null pour les clés et les valeurs. Ses performances sont meilleures que HashTableparce qu’elles sont unsynchronized.

Exemple:

import java.util.HashMap;
import java.util.Map;

public class TestClass {

    public static void main(String args[ ]) {
    Map<Integer,String> states = new HashMap<Integer,String>();
    states.put(1, "INDIA");
    states.put(2, "USA");

    states.put(3, null);    // Okay
    states.put(null,"UK");

    System.out.println(states.get(1));
    System.out.println(states.get(2));
    System.out.println(states.get(3));

    }
}

HashMap et HashTable

  • Quelques points importants sur HashMap et HashTable. veuillez lire les détails ci-dessous.

1) Hashtable et Hashmap implémentent l'interface java.util.Map. 2) Hashmap et Hashtable constituent la collection basée sur le hachage. et travaillant sur le hachage. Donc, ce sont la similitude de HashMap et HashTable.

  • Quelle est la différence entre HashMap et HashTable?

1) La première différence est que HashMap n'est pas thread-safe alors que HashTable est ThreadSafe
2) HashMap offre de meilleures performances car il n'est pas thread-safe Bien que les performances de Hashtable ne soient pas meilleures, elles sont thread-safe. donc plusieurs threads ne peuvent pas accéder à Hashtable en même temps.


HashMap: - C'est une classe disponible dans le package java.util et elle est utilisée pour stocker l'élément au format clé et valeur.

Hashtable: -Il s'agit d'une classe héritée reconnue dans le cadre de la collection


HashMaps vous donne la liberté de synchronisation et le débogage est beaucoup plus facile


Ma petite contribution:

  1. La première et la plus importante différence entre Hashtableet HashMapest que, HashMapn’est pas thread-safe alors qu’il Hashtables’agit d’une collection thread-safe.

  2. La deuxième différence importante entre Hashtableet HashMapest la performance, puisque HashMapnon synchronisée, elle fonctionne mieux que Hashtable.

  3. La troisième différence sur Hashtablevs HashMapest que Hashtablec'est une classe obsolète et que vous devriez utiliser ConcurrentHashMapà la place de HashtableJava.


1) Hashtable est synchronisé alors que hashmap ne l’est pas. 2) Une autre différence est que l'itérateur dans HashMap est sans faille alors que l'énumérateur de Hashtable ne l'est pas. Si vous modifiez la carte en effectuant une itération, vous saurez.

3) HashMap autorise les valeurs NULL, contrairement à Hashtable.





hashtable