2009-10-08 11 views
73

Sono un utente di lunga data di Python e mi piace molto il modo in cui vengono utilizzati i dizionari. Sono molto intuitivi e facili da usare. Esiste un buon Java equivalente ai dizionari Python? Ho sentito di persone che usano hashmap e hashtables. Qualcuno potrebbe spiegare le somiglianze e le differenze nell'utilizzo di hashtables e hashmaps rispetto ai dizionari Python?Dizionari equivalenti Java a Python

risposta

72

Python's dict classe è un'implementazione di ciò che la documentazione di Python chiama in modo informale "mapping types". Internamente, dict viene implementato utilizzando una tabella hash.

La classe Java HashMap è un'implementazione dell'interfaccia Map. Internamente, HashMap viene implementato utilizzando una tabella hash.

Ci sono alcune piccole differenze nella sintassi, e credo che le implementazioni siano sintonizzate in modo leggermente diverso, ma nel complesso sono completamente intercambiabili.

+9

Nessun esempio fornito :( –

+1

@kami: Quale tipo di esempio vorresti? –

+1

Qualsiasi esempio che illustri un equivalente java del dizionario di Python in azione.Una risposta utile include alcuni esempi perché la maggior parte delle persone viene qui per vedere esempi e usarli nel loro codice. –

3

Per quanto ne so, i dizionari (in realtà non li uso) sono solo un altro nome per hashmap/hashtable.

Codice di presa da http://www.fluffycat.com/Java/HashMaps/ sembra che siano utilizzati in modo molto simile, con un po 'di piastra di java in più.

+2

Java ha anche un'interfaccia di dizionario che è implementata da Hashtable. HashMap è generalmente preferito, però. –

+0

@ Michael Myers: il dizionario è deprecato, Oracle consiglia di utilizzare Map invece http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html –

4

Una differenza tra i due è che dict ha requisiti più rigidi su quali tipi di dati possono fungere da chiave. Java consentirà a qualsiasi oggetto di funzionare come una chiave, sebbene sia necessario assicurarsi che il metodo hashCode() dell'oggetto restituisca un valore univoco che rifletta il suo stato interno. Python richiede che le chiavi soddisfino la sua definizione di hashable, che specifica che il codice hash dell'oggetto non dovrebbe mai cambiare durante la sua durata.

+1

Questo è vero, ma non è effettivamente applicato da nessuna delle due lingue. Ovviamente in un metodo Java 'hashCode()' o in un metodo Python '__hash __()', dovresti provare a restituire un valore univoco che rifletta lo stato interno.In Java o Python, se si dispone di un oggetto mutabile, probabilmente non dovrebbe essere una chiave hashtable, quindi ha senso lanciare un'eccezione dai metodi 'hashCode()' o '__hash __()'. –

10

L'idea di dizionario e mappa è simile. Entrambi contengono elementi come

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

In Java, Map è implementata modi diversi, come HashMap, o TreeMap ecc put(), get() operazioni sono simili

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 

vedere la documentazione di HashMap in java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html