Java equivalente a dicionários Python


93

Sou usuário de Python há muito tempo e gosto muito da forma como os dicionários são usados. Eles são muito intuitivos e fáceis de usar. Existe um bom Java equivalente aos dicionários do python? Já ouvi falar de pessoas que usam hashmaps e hashtables. Alguém poderia explicar as semelhanças e diferenças do uso de hashtables e hashmaps em comparação com os dicionários de python?

Respostas:


106

A dictclasse do Python é uma implementação do que a documentação do Python chama informalmente de " tipos de mapeamento ". Internamente, dicté implementado usando uma tabela de hash.

A HashMapclasse do Java é uma implementação da Mapinterface. Internamente, HashMapé implementado usando uma tabela de hash.

Existem algumas pequenas diferenças na sintaxe e acredito que as implementações são ajustadas de forma um pouco diferente, mas no geral elas são completamente intercambiáveis.


40
Nenhum exemplo fornecido :(
Kamran Bigdely

1
@kami: Que tipo de exemplo você gostaria?
Daniel Pryden

5
Qualquer exemplo que ilustra um equivalente em java do dicionário de python em ação. Uma resposta útil inclui alguns exemplos, porque a maioria das pessoas vem aqui para ver exemplos e usá-los em seu código.
Kamran Bigdely

13
@kami: Não acho isso certo. A pergunta não pergunta "qual é o código Java equivalente para algum código Python específico". Na verdade, a pergunta não contém nenhum código. Não tenho certeza de qual seria o valor de adicionar exemplos de uso da API do mapa em Java; esta resposta já está vinculada à documentação canônica. Se você quiser aprender Java, comece com um tutorial, não Stack Overflow. Certamente não acho que essa resposta justifique uma votação negativa apenas porque falta um exemplo de código que possa ser copiado.
Daniel Pryden

4
É triste ler aquele comentário dizendo "a maioria das pessoas vem aqui para ver exemplos e usá-los em seus códigos ", espero que esteja errado.
0xc0de

31

A ideia de dicionário e mapa é semelhante. Ambos contêm elementos como

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

Em Java, Mapé implementado de maneiras diferentes HashMap, como , TreeMapetc., as put(), get()operações são semelhantes

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 a documentação do HashMap em java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

Até onde eu sei (eu não uso java), dicionários são apenas outro nome para um hashmap / hashtable.

Pegando o código de http://www.fluffycat.com/Java/HashMaps/ parece que eles são usados ​​de uma maneira muito semelhante, com um pouco de boiler-plate extra de java.


3
Java ainda tem uma interface de dicionário que é implementada por Hashtable. HashMap geralmente é o preferido.
Michael Myers

1
@Michael Myers: O dicionário está obsoleto, a Oracle recomenda usar o Map em vez disso. Docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

Uma diferença entre os dois é que dicthá requisitos mais rígidos quanto a quais tipos de dados podem atuar como uma chave. Java permitirá que qualquer objeto funcione como uma chave - embora você deva tomar cuidado para garantir que o hashCode()método do objeto retorne um valor único que reflita seu estado interno. O Python requer chaves para se ajustar à sua definição de hash , que especifica que o código hash do objeto nunca deve ser alterado durante sua vida útil.


1
Isso é verdade, mas não é realmente aplicado por nenhum dos idiomas. Obviamente, em um hashCode()método Java ou em um __hash__()método Python , você deve tentar retornar um valor exclusivo que reflita o estado interno. Em Java ou Python, se você tiver um objeto mutável, provavelmente não deve ser uma chave hashtable, portanto, faz sentido lançar uma exceção dos métodos hashCode()ou __hash__().
Daniel Pryden,

1
Na minha experiência, quase tudo em Python pode ser uma chave de dicionário ... qual é o 'requisito mais estrito'?
Ron Kalian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.