99 votes

Équivalent Java des dictionnaires Python

Je suis un utilisateur de longue date de Python 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 des dictionnaires Python ? J'ai entendu parler de personnes utilisant des hashmaps et des hashtables. Quelqu'un pourrait-il m'expliquer les similitudes et les différences entre l'utilisation de hashtables et de hashmaps et les dictionnaires python ?

118voto

Daniel Pryden Points 22167

Python dict est une implémentation de ce que la documentation Python appelle de manière informelle " Types de cartographie ". En interne, dict est implémenté en utilisant une table de hachage.

Java HashMap est une implémentation de la classe Map l'interface. En interne, HashMap est implémenté en utilisant une table de hachage.

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

50 votes

Aucun exemple fourni :(

1 votes

@kami : Quel genre d'exemple voulez-vous ?

6 votes

Tout exemple qui illustre un équivalent java du dictionnaire de python en action. Une réponse utile comprend des exemples car la plupart des gens viennent ici pour voir des exemples et les utiliser dans leur code.

37voto

Hary Bakta Points 379

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

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

En Java, Map est mis en œuvre de différentes manières comme HashMap ou TreeMap etc. put(), get() les 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 en java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html

0 votes

Les commentaires en Java sont // pas # :)

5voto

Tim Clemons Points 1185

Une différence entre les deux est que dict a des exigences plus strictes quant aux types de données pouvant servir de clé. Java permet à n'importe quel objet de servir de clé, bien que vous deviez veiller à ce que le type de données de l'objet soit le même que celui de la clé. hashCode() renvoie une valeur unique qui reflète son état interne. Python exige que les clés correspondent à sa définition de hachable qui spécifie que le code de hachage de l'objet ne doit jamais changer pendant sa durée de vie.

1 votes

C'est vrai, mais ce n'est pas vraiment appliqué par les deux langages. De toute évidence, dans un langage Java hashCode() ou dans une méthode Python __hash__() vous devez essayer de retourner une valeur unique qui reflète l'état interne. Que ce soit en Java ou en Python, si vous avez un objet mutable, il ne devrait probablement pas être une clé hachable, il est donc logique de lancer une exception à partir de la méthode hashCode() o __hash__() méthodes.

1 votes

D'après mon expérience, presque tout ce qui est en Python peut être une clé dict... Quelle est l'exigence la plus stricte ?

5voto

Tarrant Points 1202

Pour autant que je sache (je n'utilise pas vraiment Java), les dictionnaires sont juste un autre nom pour un hashmap/hashtable.

Extraire le code de http://www.fluffycat.com/Java/HashMaps/ il semble qu'ils soient utilisés de manière très similaire, avec un peu de java boiler-plate supplémentaire.

3 votes

Java possède même une interface Dictionary qui est implémentée par Hashtable. Cependant, HashMap est généralement préféré.

1 votes

@Michael Myers : Dictionary est déprécié, Oracle recommande d'utiliser Map à la place. docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X