Java équivalent aux dictionnaires Python

93

J'utilise Python depuis longtemps et j'aime beaucoup la façon dont les dictionnaires sont utilisés. Ils sont très intuitifs et faciles à utiliser. Existe-t-il un bon équivalent Java aux dictionnaires de python? J'ai entendu parler de personnes utilisant des hashmaps et des hashtables. Quelqu'un pourrait-il expliquer les similitudes et les différences entre l'utilisation des hashtables et des hashmaps par rapport aux dictionnaires de python?

slimbo
la source

Réponses:

106

La dictclasse de Python est une implémentation de ce que la documentation Python appelle de manière informelle "les types de mappage ". En interne, dictest implémenté à l'aide d'une table de hachage.

La HashMapclasse Java est une implémentation de l' Mapinterface. En interne, HashMapest implémenté à l'aide d'une table de hachage.

Il y a quelques différences mineures dans la syntaxe, et je pense que les implémentations sont réglées légèrement différemment, mais dans l'ensemble, elles sont complètement interchangeables.

Daniel Pryden
la source
40
Aucun exemple fourni :(
Kamran Bigdely
1
@kami: Quel genre d'exemple voudriez-vous?
Daniel Pryden le
5
Tout exemple qui illustre un équivalent java du dictionnaire de python en action. Une réponse utile inclut un exemple car la plupart des gens viennent ici pour voir des exemples et les utiliser dans leur code.
Kamran Bigdely le
13
@kami: Je ne pense pas que ce soit vrai. La question ne demande pas "quel est le code Java équivalent pour un code Python spécifique". En fait, la question ne contient aucun code. Je ne suis pas sûr de l'intérêt d'ajouter des exemples d'utilisation de l'API Map en Java; cette réponse renvoie déjà à la documentation canonique. Si vous souhaitez apprendre Java, commencez par un didacticiel et non par Stack Overflow. Je ne pense certainement pas que cette réponse justifie un vote défavorable simplement parce qu'il manque un exemple de code copiable.
Daniel Pryden le
4
Triste de lire ce commentaire disant "la plupart des gens viennent ici pour voir des exemples et les utiliser dans leur code ", j'espère que c'est faux.
0xc0de
31

L'idée du dictionnaire et de la carte est similaire. Les deux contiennent des éléments comme

key1:value1, key2:value2 ... and so on

En Java, Mapest implémenté de différentes manières comme HashMap, ou TreeMapetc. les put(), get()opérations sont similaires

import java.util.HashMap;

Map map = new HashMap();
// Put elements to the map
map.put("Ram", new Double(3434.34));
map.put("Krishna", new Double(123.22));
map.put("Hary", new Double(1378.00));
//to get elements
map.get("Krishna"); # =123.22
map.get("Hary"); # = 1378.00 

Voir la documentation de HashMap dans java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

Hary Bakta
la source
5

Autant que je sache (je n'utilise pas réellement Java), les dictionnaires ne sont qu'un autre nom pour une table de hachage / table de hachage.

En récupérant le code de http://www.fluffycat.com/Java/HashMaps/, il semble qu'ils soient utilisés d'une manière très similaire, avec un peu plus de java.

Tabitha
la source
3
Java a même une interface de dictionnaire qui est implémentée par Hashtable. Cependant, HashMap est généralement préféré.
Michael Myers
1
@Michael Myers: Dictionary est obsolète, Oracle recommande d'utiliser Map à la place docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window
5

Une différence entre les deux est que les dictexigences sont plus strictes quant aux types de données pouvant agir comme une clé. Java permettra à tout objet de fonctionner comme une clé - bien que vous deviez vous assurer que la hashCode()méthode de l'objet renvoie une valeur unique qui reflète son état interne. Python nécessite que les clés correspondent à sa définition de hashable , qui spécifie que le code de hachage de l'objet ne doit jamais changer au cours de sa durée de vie.

Tim Clemons
la source
1
C'est vrai, mais ce n'est pas réellement appliqué par l'une ou l'autre langue. Évidemment, dans une hashCode()méthode Java ou dans une __hash__()méthode Python , vous devriez essayer de renvoyer une valeur unique qui reflète l'état interne. Dans Java ou Python, si vous avez un objet mutable, il ne devrait probablement pas être une clé de table de hachage, il est donc logique de lever une exception à partir des méthodes hashCode()ou __hash__().
Daniel Pryden
1
D'après mon expérience, presque tout en Python peut être une clé dict ... quelle est la `` condition la plus stricte ''?
Ron Kalian