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?

Foi útil?

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());
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top