Java Entspricht Python-Wörterbüchern


93

Ich bin ein langjähriger Benutzer von Python und mag die Art und Weise, wie die Wörterbücher verwendet werden. Sie sind sehr intuitiv und einfach zu bedienen. Gibt es ein gutes Java-Äquivalent zu Pythons Wörterbüchern? Ich habe von Leuten gehört, die Hashmaps und Hashtabellen verwenden. Könnte jemand die Ähnlichkeiten und Unterschiede bei der Verwendung von Hashtabellen und Hashmaps im Vergleich zu Pythons Wörterbüchern erklären?

Antworten:


106

Die Python- dictKlasse ist eine Implementierung dessen, was die Python-Dokumentation informell als " Zuordnungstypen " bezeichnet. Intern dictwird mit einer Hashtabelle implementiert.

Javas HashMapKlasse ist eine Implementierung der MapSchnittstelle. Intern HashMapwird mit einer Hashtabelle implementiert.

Es gibt ein paar kleine Unterschiede in der Syntax, und ich glaube, die Implementierungen sind etwas anders abgestimmt, aber insgesamt sind sie vollständig austauschbar.


40
Kein Beispiel angegeben :(
Kamran Bigdely

1
@kami: Was für ein Beispiel würdest du wollen?
Daniel Pryden

5
Jedes Beispiel, das ein Java-Äquivalent des Python-Wörterbuchs in Aktion darstellt. Eine nützliche Antwort ist ein Beispiel, da die meisten Leute hierher kommen, um Beispiele zu sehen und sie in ihrem Code zu verwenden.
Kamran Bigdely

13
@kami: Ich denke nicht, dass das richtig ist. Die Frage lautet nicht "Was ist der äquivalente Java-Code für einen bestimmten Python-Code?". Tatsächlich enthält die Frage überhaupt keinen Code. Ich bin mir nicht sicher, welchen Wert das Hinzufügen von Beispielen für die Verwendung der Map-API in Java haben würde. Diese Antwort verweist bereits auf die kanonische Dokumentation. Wenn Sie Java lernen möchten, beginnen Sie mit einem Tutorial, nicht mit einem Stapelüberlauf. Ich glaube nicht, dass diese Antwort eine Abwertung rechtfertigt, nur weil es kein kopierfähiges Codebeispiel gibt.
Daniel Pryden

4
Traurig zu lesen, dass "die meisten Leute hierher kommen, um Beispiele zu sehen und sie in ihrem Code zu verwenden ", hoffe ich, dass dies falsch ist.
0xc0de

31

Die Idee von Wörterbuch und Karte ist ähnlich. Beide enthalten Elemente wie

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

In Java Mapwird verschiedene Möglichkeiten , wie implementiert HashMap, oder TreeMapusw. put(), get()Operationen sind ähnlich

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 

Siehe Dokumentation von HashMap in Java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

Soweit mir bekannt ist (ich verwende eigentlich kein Java), sind Wörterbücher nur ein anderer Name für eine Hashmap / Hashtabelle.

Wenn Sie sich den Code von http://www.fluffycat.com/Java/HashMaps/ holen, werden sie anscheinend auf sehr ähnliche Weise verwendet, mit etwas zusätzlicher Java-Boiler-Platte.


3
Java hat sogar eine Dictionary-Schnittstelle, die von Hashtable implementiert wird. HashMap wird jedoch im Allgemeinen bevorzugt.
Michael Myers

1
@ Michael Myers: Wörterbuch ist veraltet, Oracle empfiehlt, stattdessen Map zu verwenden docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

Ein Unterschied zwischen beiden besteht darin, dass dictstrengere Anforderungen an die Datentypen gestellt werden, die als Schlüssel fungieren können. Mit Java kann jedes Objekt als Schlüssel verwendet werden. Sie sollten jedoch darauf achten, dass die hashCode()Methode des Objekts einen eindeutigen Wert zurückgibt, der den internen Status widerspiegelt. Python benötigt Schlüssel, die zu seiner Definition von Hashable passen. Dies gibt an, dass sich der Hashcode des Objekts während seiner Lebensdauer niemals ändern darf.


1
Dies ist wahr, wird aber von keiner Sprache erzwungen. Offensichtlich sollten Sie entweder in einer Java- hashCode()Methode oder in einer Python- __hash__()Methode versuchen, einen eindeutigen Wert zurückzugeben, der den internen Status widerspiegelt. Wenn Sie in Java oder Python ein veränderbares Objekt haben, sollte es wahrscheinlich kein Hashtabellenschlüssel sein. Daher ist es sinnvoll, eine Ausnahme von den Methoden hashCode()oder __hash__()auszulösen.
Daniel Pryden

1
Nach meiner Erfahrung kann fast alles in Python ein Diktatschlüssel sein ... was ist die "strengere Anforderung"?
Ron Kalian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.