2009-10-08 13 views
73

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

Antwort

72

Python dict-Klasse ist eine Umsetzung dessen, was der Python-Dokumentation nennt informell „mapping types“. Intern wird dict mit einer Hashtabelle implementiert.

Javas HashMap Klasse ist eine Implementierung der Map Schnittstelle. Intern wird HashMap mit einer Hashtabelle implementiert.

Es gibt ein paar kleine Unterschiede in der Syntax, und ich glaube, dass die Implementierungen etwas anders abgestimmt sind, aber insgesamt sind sie völlig austauschbar.

+9

Kein Beispiel bereitgestellt :( –

+1

@kami: Welche Art von Beispiel möchten Sie? –

+1

Jedes Beispiel, das ein Java-Äquivalent von Python-Wörterbuch in Aktion darstellt. Eine nützliche Antwort enthält ein Beispiel, weil die meisten Leute hierher kommen, um Beispiele zu sehen und sie in ihrem Code zu verwenden. –

3

Soweit mir bekannt ist (ich benutze nicht Java) Wörterbücher sind nur ein anderer Name für eine Hashmapp/Hashtable.

Grabbing-Code von http://www.fluffycat.com/Java/HashMaps/ es scheint, dass sie in einer sehr ähnlichen Weise verwendet werden, mit ein bisschen extra Java-Boiler-Platte.

+2

Java selbst hat eine Wörterbuchschnittstelle, die von Hashtable implementiert wird. HashMap wird jedoch im Allgemeinen bevorzugt. –

+0

@ Michael Myers: Dictionary ist veraltet, empfiehlt Oracle Map stattdessen zu verwenden http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html –

4

Ein Unterschied zwischen den beiden ist, dass dict strengere Anforderungen hat, welche Datentypen als Schlüssel dienen können. Java erlaubt jedem Objekt, als Schlüssel zu arbeiten - obwohl Sie darauf achten sollten, dass die Methode hashCode() des Objekts einen eindeutigen Wert zurückgibt, der seinen internen Zustand widerspiegelt. Python benötigt Schlüssel, um seine Definition von hashable anzupassen, die angibt, dass der Hash-Code des Objekts sich niemals über seine Lebensdauer ändern darf.

+1

Das ist richtig, aber es wird von keiner der beiden Sprachen tatsächlich durchgesetzt. Offensichtlich sollten Sie entweder in einer Java 'hashCode()' Methode oder in einer Python '__hash __()' Methode versuchen, einen eindeutigen Wert zurückzugeben, der den internen Zustand widerspiegelt.Wenn Sie in Java oder Python ein veränderbares Objekt haben, sollte es wahrscheinlich kein Hashtable-Schlüssel sein. Daher ist es sinnvoll, eine Ausnahme von den Methoden 'hashCode()' oder '__hash __()' zu werfen. –

10

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

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

In Java wird Map verschiedene Möglichkeiten, wie HashMap implementiert oder TreeMap usw. put(), get() Operationen sind ähnlich

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