Boa tarde, amigos.
Como que eu faço para inserir dados num HashMap de forma ordenada usando Comparator?
Para mapas ordenados, use a interface SortedMap.
Uma classe concreta que implementa SortedMap é TreeMap.
Saquei, vou testar. Será que essa estrutura possui uma curva de crescimento maior que hashmap sobrecarregando memória depois de um tempo?
É só fazer um teste. Só para você ter uma idéia.
Para cada objeto que se guarda em uma TreeMap (“red-black tree”), deve-se guardar um “nodo” que é um objeto que aponta para a chave, o valor, o nodo à esquerda, o nodo à direita, o nodo pai, e um flag (red/black). Isso dá 4 * 6 bytes, mais o overhead de cada objeto. Falando assim parece bastante coisa, mas não é tanto assim.
Cada HashMap, por sua vez, contém um array de nodos, que são objetos que apontam para a chave e o valor, assim como o próximo nodo, e o valor do hash. Isso dá 4 * 4 bytes, mais o overhead de cada objeto.
O problema é que quando o HashMap enche, ele deve ser redimensionado, e isso pode até ocupar muito mais espaço que você está imaginando. Além disso, nunca um HashMap fica completamente cheio; há uma configuração (chamada Load Factor) que por default é 0.75. Ou seja, quando o array fica 3/4 cheio, ele é expandido até a próxima potência de 2 que é maior que 3/4 da capacidade atual.
Veja os fontes de java.util.HashMap e java.util.TreeMap para ver o que ocorre.
Testei aqui com TreeTable mas o mapeamento para js do DWR(ajax framework) não eceitou essa estrutura. Gostaria de saber como usar o Comparator mesmo no HashMap.