Tipos de mapa
Em Java, a principal função do mapa é armazenar pares de valor-chave. Como o valor é obtido com base na chave, a chave não pode ser repetida. Possui principalmente as seguintes categorias:
Hashmap:
Os dados de armazenamento de mapas mais usados de acordo com o valor HashCode da chave e podem obter diretamente seu valor de acordo com a chave, com uma velocidade de acesso muito rápida. Ao atravessar, a ordem de aquisição de dados é completamente aleatória. O hashmap permite que apenas um registro seja nulo; o valor de vários registros a serem nulos; O hashmap não suporta a sincronização do encadeamento, ou seja, vários threads podem escrever hashmap a qualquer momento; Pode levar a inconsistência nos dados. Se for necessária a sincronização, você poderá usar o método sincronizado de coleções para tornar o hashmap sincronizado ou usar simultaneses. Hashtable é semelhante ao hashmap. Herda da aula de dicionário. A diferença é que ele não permite que as chaves ou valores gravados estejam vazios; Ele suporta a sincronização do encadeamento, ou seja, apenas um thread pode escrever hashtable a qualquer momento, por isso também faz com que a hashtable seja mais lenta ao escrever.
LinkedHashmap
A ordem de inserção dos registros é salva. Ao atravessar o LinkedHashmap com o iterador, os registros obtidos primeiro devem ser inseridos primeiro. Você também pode usar parâmetros durante a construção e classificá -los de acordo com o número de aplicativos. Será mais lento que o hashmap ao atravessar, mas há uma exceção. Quando o Hashmap tem uma grande capacidade e é menos real, pode ser mais lento que o LinkedHashmap, porque a velocidade de travessia do LinkedHashMap está relacionada apenas aos dados reais e não tem nada a ver com a capacidade, enquanto a velocidade de travessia do Hashmap está relacionada à sua capacidade.
Treemap
Implementando a interface SortMap, os registros que ele salva podem ser classificados de acordo com a chave. Por padrão, ele é classificado em ordem crescente de valores -chave ou também pode especificar um comparador classificado. Quando é atravessado com o iterador, os registros obtidos são classificados.
Classificação -chave
A partir da introdução acima dos tipos de mapas, podemos ver que o TreeMap tem sua própria função de classificação de chaves. Ele só precisa implementar uma interface de comparação ao mesmo tempo ao criá -la. O exemplo é o seguinte:
private estático void Sort_By_Key () {map <Inteiro, Integer> Treemap = novo TreeMap <> (novo comparador <Teger> () {@Override public int Compare (Inteiro O1, Inteiro O2) {retornar o2-O1; // Inverso primeiro. // preencha os dados para (int i = 0; i <100; i ++) {int key = (int) (10000*math.random ()); int valor = (int) (10000*math.random ()); Treemap.put (chave, valor); } outmap (Treemap); } public static void outmap (mapa <inteiro, número inteiro> map) {for (número inteiro: map.keyset ()) {system.out.println ("key ="+integer+"value ="+map.get (inteiro); }}/* O resultado é o seguinte: key = 9977 Valor = 80Key = 9684 Valor = 7108Key = 9422 Valor = 1706Key = 9264 Valor = 1210Key = 9248 Valor = 4758Key = 9024 Valor = 7048y = 8892 Valor = 314Key = 8877 Valor = 8171Key = 8728 Valor = 1538Key = 8513 Valor = 4956Key = 8462 Valor = 5617Key = 8355 Valor = 8912*/Como pode ser visto no exposto, não é difícil classificar por teclas, mas é mais problemático colocar o tipo, então você precisa virar o mapa.
Classificar por valor
Como o MAP não tem essa função em Java, precisamos implementá -la sozinhos. A idéia é a seguinte:
A lista em Java pode usar a interface de comparação.
O mapa é na verdade uma coleção de entrada. Portanto, o uso da lista <entrada <>> pode implementar a classificação e inserção dos elementos classificados no LinkedMap.
A implementação do código é a seguinte:
mapa estático privado <Inteiro, Inteiro> SortMap (mapa <Inteiro, Integer> LinkedMap) {list <pp.entry <Integer, Integer >> cache = new ArrayList <> (LinkedMap.entrySet ()); // reescreva as coleções de funções de comparação.Sort (cache, novo comparador <pap.entry <Inteiro, Integer >> () {@Override public int compare (entrada <inteiro, número inteiro> o1, entrada <integer, integger> o2) {// se o valor de retorno é menor que 0, então o1 é o2, o O1, antes do dia2; Mapa <Inteiro, Inteiro> ResultMap = new LinkedHashMap <> (); // Insira o resultado no LinkedMap e retorne para (int i = 0; i <cache.size (); i ++) {resultmap.put (cache.get (i) .getKey (), cache.get (i) .getValue ()); } retornar resultMap; }/*Resultado: 7965 9961067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*/Dessa forma, a classificação por valor e classificação por chave pode ser alcançada.