2009-10-08 32 views
73

Soy un usuario de Python desde hace mucho tiempo y me gusta mucho la forma en que se usan los diccionarios. Son muy intuitivos y fáciles de usar. ¿Hay un buen Java equivalente a los diccionarios de python? He oído hablar de personas que usan hashmaps y hashtables. ¿Podría alguien explicar las similitudes y diferencias de usar hashtables y hashmaps versus los diccionarios de python?Java Equivalente a los diccionarios de Python

Respuesta

72

La clase dict de Python es una implementación de lo que la documentación de Python informalmente llama "mapping types". Internamente, dict se implementa usando una tabla hash.

La clase HashMap de Java es una implementación de la interfaz Map. Internamente, HashMap se implementa usando una tabla hash.

Existen algunas diferencias menores en la sintaxis, y creo que las implementaciones se ajustan de forma ligeramente diferente, pero en general son completamente intercambiables.

+9

No se proporcionó ningún ejemplo :( –

+1

@kami: ¿Qué tipo de ejemplo quieres? –

+1

Cualquier ejemplo que ilustre un java equivalente del diccionario de python en acción. Una respuesta útil incluye algún ejemplo porque la mayoría de la gente viene aquí para ver ejemplos y usarlos en su código. –

3

Por lo que yo sé (en realidad no uso java) los diccionarios son solo otro nombre para un hashmap/hashtable.

Código de agarre de http://www.fluffycat.com/Java/HashMaps/ parece que se utilizan de una manera muy similar, con un poco de placa de caldera adicional de java.

+2

Java tiene incluso una interfaz de diccionario que es implementada por Hashtable. HashMap es generalmente preferido, sin embargo. –

+0

@Michael Myers: el diccionario está en desuso, Oracle recomienda utilizar Map en su lugar http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html –

4

Una diferencia entre los dos es que dict tiene requisitos más estrictos sobre qué tipos de datos pueden actuar como clave. Java permitirá que cualquier objeto funcione como clave, aunque debe asegurarse de que el método hashCode() del objeto devuelva un valor único que refleje su estado interno. Python requiere que las claves se ajusten a su definición de hashable, que especifica que el código hash del objeto nunca debe cambiar a lo largo de su vida útil.

+1

Esto es cierto, pero en realidad no se aplica por ninguno de los dos idiomas. Obviamente, en un método Java 'hashCode()' o en un método Python '__hash __()', debe intentar devolver un valor único que refleje el estado interno.En Java o Python, si tiene un objeto mutable, probablemente no debería ser una clave hashtable, por lo que tiene sentido arrojar una excepción de los métodos 'hashCode()' o '__hash __()'. –

10

La idea de diccionario y mapa es similar. Ambos contienen elementos como

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

En Java, Map se implementa diferentes maneras como HashMap o TreeMap etc. put(), get() operaciones son similares

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 

Consulte la documentación de HashMap en java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html