Introdução ao mapa
Mapeie a chave para o objeto do valor. Um mapa não pode conter teclas duplicadas; Cada tecla só pode mapear para um valor no máximo. Essa interface substitui a classe de dicionário, que é totalmente uma classe abstrata, não uma interface.
A interface do mapa fornece três visualizações de coleção que permitem a visualização do conteúdo de um mapa na forma de um conjunto de chaves, um conjunto de valores ou um conjunto de relacionamento com mapeamento de valor-chave. A ordem de mapeamento é definida como a ordem em que o iterador retorna seus elementos na visualização da coleção do mapa. Algumas implementações de mapeamento garantem explicitamente sua ordem, como a classe Treemap; Outros não garantem sua ordem, como a classe Hashmap.
Nota: Deve -se tomar cuidado extra ao usar objetos mutáveis como teclas de mapeamento. Quando um objeto é uma chave em um mapa, se o valor do objeto for alterado de uma maneira que afete a comparação igual, o comportamento do mapa será incerto. Um caso especial que isso proíbe é que um mapa não se permite incluir uma chave. Embora um mapa possa incluir -se como um valor, tenha cuidado: a definição de métodos iguais e hashcode não será mais explícita nesses mapas.
Interface do mapa:
O mapa fornece um mapeamento de chave para valor. Um mapa não pode conter a mesma chave e cada tecla pode mapear apenas um valor. A interface do mapa fornece três tipos de visualizações da coleção. O conteúdo do mapa pode ser considerado como um conjunto de coleções de chaves, um conjunto de coleções de valor ou um conjunto de mapeamentos de valor-chave.
Classe de hashtable
Hashtable herda a interface do mapa e implementa uma tabela de hash com um mapeamento de valor-chave. Qualquer objeto não nulo pode ser usado como chave ou valor.
Use put (chave, valor) para adicionar dados, usar get (chave) para recuperar dados. A sobrecarga de tempo dessas duas operações básicas é constante. A hashtable ajusta o desempenho através da capacidade inicial e dos parâmetros do fator de carga. Geralmente, o fator de carga padrão 0,75 pode alcançar melhor o equilíbrio de tempo e espaço. Aumentar o fator de carga pode economizar espaço, mas o tempo de pesquisa correspondente aumentará, o que afetará operações como GET e PUT.
Um exemplo simples de usar uma hashtable é o seguinte: Coloque 1, 2 e 3 em uma hashtable, e suas chaves são "um", "dois", "três", respectivamente:
Hashtable números = new hashtable (); números.put ("One", novo número inteiro (1)); números.put ("dois", novo inteiro (2)); números.put ("três", novo inteiro (3));Para retirar um número, como 2, use a tecla correspondente:
Número inteiro n = (número inteiro ).get ("dois"); System.out.println ("dois =" + n);Como um objeto como chave determinará a posição do valor correspondente calculando sua função de hash, qualquer objeto como uma chave deve implementar os métodos HashCode e é igual a. Os métodos HashCode e Equals herdam do objeto da classe raiz. Se você usar uma classe personalizada como chave, tenha muito cuidado. De acordo com a definição da função de hash, se os dois objetos forem iguais, ou seja, obj1.equals (obj2) = true, seu código de hash deverá ser o mesmo, mas se os dois objetos forem diferentes, seus códigos de hash podem não ser diferentes. Se os códigos de hash de dois objetos diferentes forem iguais, esse fenômeno será chamado de conflito. O conflito aumentará a sobrecarga de tempo da operação da tabela de hash. Portanto, tente definir o método hashcode () para acelerar a operação da tabela de hash.
Se o mesmo objeto tiver códigos de hash diferentes, a operação na tabela de hash terá resultados inesperados (o método GET esperado retorna nulo). Para evitar esse problema, você só precisa se lembrar de uma coisa: você deve reescrever o método Equals e Hashcode ao mesmo tempo, em vez de apenas escrever um deles.
A hashtable é sincronizada.
Classe Hashmap
O hashmap é semelhante ao hashtable, a diferença é que o hashmap é assíncrono e permite nulo, ou seja, valor nulo e chave nula. , mas quando o hashmap é considerado uma coleção (o método valores () pode retornar uma coleção), seu tempo de suboperação iterativo é proporcional à capacidade do hashmap. Portanto, se o desempenho das operações de iteração for muito importante, não defina a capacidade de inicialização do hashmap para ser muito alta ou o fator de carga é muito baixo.
Classe de fracoshashmap
O fracoHashmap é um hashmap aprimorado que implementa "referência fraca" à chave. Se uma chave não for mais referenciada externamente, a chave poderá ser reciclada pelo GC.
O acima é uma introdução à interface do mapa Java. Os alunos que estão aprendendo a programação Java podem se referir a ele.