Java equivalente a los diccionarios de Python

93

Soy un usuario de Python desde hace mucho tiempo y me gusta mucho la forma en que se utilizan los diccionarios. Son muy intuitivos y fáciles de usar. ¿Existe un buen equivalente de Java a los diccionarios de Python? He oído hablar de personas que utilizan hashmaps y tablas hash. ¿Alguien podría explicar las similitudes y diferencias del uso de tablas hash y mapas hash frente a los diccionarios de Python?

slimbo
fuente

Respuestas:

106

La dictclase de Python es una implementación de lo que la documentación de Python llama informalmente " tipos de mapeo ". Internamente, dictse implementa mediante una tabla hash.

La HashMapclase de Java es una implementación de la Mapinterfaz. Internamente, HashMapse implementa mediante una tabla hash.

Hay algunas diferencias menores en la sintaxis, y creo que las implementaciones están ajustadas de manera ligeramente diferente, pero en general son completamente intercambiables.

Daniel Pryden
fuente
40
No se proporcionan ejemplos :(
Kamran Bigdely
1
@kami: ¿Qué tipo de ejemplo le gustaría?
Daniel Pryden
5
Cualquier ejemplo que ilustre un equivalente en Java 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.
Kamran Bigdely
13
@kami: No creo que eso sea correcto. La pregunta no pregunta "cuál es el código Java equivalente para algún código Python específico". De hecho, la pregunta no contiene ningún código. No estoy seguro de cuál sería el valor de agregar ejemplos del uso de la API de mapas en Java; esta respuesta ya está vinculada a la documentación canónica. Si desea aprender Java, comience con un tutorial, no con Stack Overflow. Ciertamente, no creo que esta respuesta justifique un voto negativo solo porque carece de una muestra de código que se pueda copiar y pegar.
Daniel Pryden
4
Es triste leer ese comentario que dice "la mayoría de la gente viene aquí para ver ejemplos y usarlos en su código ", espero que esto esté mal.
0xc0de
31

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

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

En Java, Mapse implementa de diferentes maneras HashMap, como , TreeMapetc., las put(), get()operaciones son similares

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 

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

Hary Bakta
fuente
5

Hasta donde yo sé (en realidad no uso Java), los diccionarios son solo otro nombre para un mapa / tabla hash.

Tomando el código de http://www.fluffycat.com/Java/HashMaps/ parece que se usan de una manera muy similar, con un poco de boiler-plate extra de Java.

Tabitha
fuente
3
Java incluso tiene una interfaz de diccionario implementada por Hashtable. Sin embargo, generalmente se prefiere HashMap.
Michael Myers
1
@Michael Myers: el diccionario está obsoleto, Oracle recomienda utilizar Map en su
Broken_Window
5

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

Tim Clemons
fuente
1
Esto es cierto, pero en realidad ninguno de los dos idiomas lo impone. Obviamente, en un hashCode()método Java o en un __hash__()método Python , 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 de tabla hash, por lo que tiene sentido lanzar una excepción de los métodos hashCode()o __hash__().
Daniel Pryden
1
En mi experiencia, casi cualquier cosa en Python puede ser una clave de dictado ... ¿cuál es el 'requisito más estricto'?
Ron Kalian