Como faço para criar uma tabela de hash em Java?
Pergunta
Qual é a maneira mais simples para criar uma tabela de hash (ou matriz associativa...) em Java?Meu google-fu já virou até um par de exemplos, mas há uma forma padrão de fazer isso?
E existe uma maneira de preencher a tabela com uma lista de chave->valor de pares sem individualmente chamar um método add do objeto para cada par?
Solução
Map map = new HashMap();
Hashtable ht = new Hashtable();
Ambas as classes podem ser encontradas a partir do java.util pacote.A diferença entre os 2 é explicado no seguinte jGuru FAQ entrada.
Outras dicas
Você pode utilizar duas chaves para configurar os dados.Você ainda chamada de adicionar, ou colocar, mas é menos feio:
private static final Hashtable<String,Integer> MYHASH = new Hashtable<String,Integer>() {{
put("foo", 1);
put("bar", 256);
put("data", 3);
put("moredata", 27);
put("hello", 32);
put("world", 65536);
}};
Também não se esqueça que tanto o Mapa e o Hashtable são genéricos em Java 5 e para cima (como em qualquer outra classe no Framework de coleções).
Map<String, Integer> numbers = new HashMap<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Integer one = numbers.get("one");
Assert.assertEquals(1, one);
import java.util.HashMap;
Map map = new HashMap();
O que Edmund disse.
Como para não chamar .adicionar o tempo todo, não, não idiomatically.Haveria vários hacks (armazená-lo em uma matriz e, em seguida, loop) que você poderia fazer se você realmente queria, mas eu não recomendaria.
E existe uma maneira de preencher a tabela com uma lista de chave->valor de pares sem individualmente chamar um método add do objeto para cada par?
Um problema com a sua questão é que você não menciona que a forma que os seus dados para começar com.Se a sua lista de pares passou a ser uma lista de Mapa.Entrada de objectos, seria muito fácil.
Apenas para jogar isso fora, não é um (muito criticado) classe chamada java.util.Propriedades que é uma extensão do Hashtable.Ele espera apenas a Seqüência de chaves e valores e permite que você carregar e armazenar os dados usando arquivos ou fluxos.O formato do arquivo, ele lê e escreve, é como segue:
key1=value1
key2=value2
Eu não sei se é isso que você está procurando, mas há situações onde isto pode ser útil.
É importante notar que o Java da função de hash é menor do que o ideal.Se você quiser menos colisões e a quase completa eliminação de re-criação de algoritmos hash em ~50% de sua capacidade, eu usaria um Buz algoritmo de Hash Hash Buz
A razão Java do algoritmo de hash é fraco, é mais evidente na forma como hashes de Cadeias de caracteres.
"a".hash()
dar-lhe a representação ASCII do "a"
- 97
, então "b"
seria 98
.O ponto inteiro de hash é atribuir um arbitrário e "como aleatório, possível de número".
Se você precisa de um rápido e sujo tabela de hash, por todos os meios, usar java.util
.Se você estiver procurando por algo robusto que é mais escalável, eu gostaria de olhar para implementar as suas próprias.
Hashtable<Object, Double> hashTable = new Hashtable<>();
colocar valores ...
obter max.
Optional<Double> optionalMax = hashTable.values().stream().max(Comparator.naturalOrder());
if (optionalMax.isPresent())
System.out.println(optionalMax.get());