Boa tarde galera, queria saber se há alguma forma de usar um Hash map em que os números integer já usados sejam reutilizados caso tenham sido removidos da tabela, segue exemplo:
Tenho as keys:
1, 2, 3, 4, 5, 6
Caso o 4 seja removido da tabela, a próxima vez que um valor for adicionado nela, será na key 4.
Há alguma forma de fazer isso? eu só consegui fazer uma espécie de auto-incremento de key.
inti=-1;for(Integerkey:getListaPlayers().keySet())i=key;i++;getListaPlayers().put(i,player); // listaPlayers é meu hashmapplayer.setId(i); // Player é meu objeto
Crie uma lista onde, a cada vez que você remover um item do mapa, insere a chave do mesmo nela. Ao adicionar itens no mapa, consulte a lista e se tiver elementos, usa o último elemento inserido na lista como chave.
N
Nicksf13
Como assim? Tipo, toda vez que eu remover um item do hashmap inserir numa lista que indicam os números livres antes do primeiro da hashmap?
Usei uma pilha que é alimentada quando alguém é removido do hashmap, assim a próxima key será a key do último valor removido
A pilha resolveu seu problema?
Sugeri uma lista para que ela funcione como uma fila, onde o primeiro a entrar é o primeiro a sair. Caso você tenha mais de uma remoção antes de uma inserção no mapa, vai ter alguns valores de chave que vão ficar bastante tempo sem serem usados.
Agora, se a sua lógica garante que sempre vai ter uma remoção seguida por uma inserção, então pode usar a pilha tranquilamente.
A escolha entre pilha ou fila depende da sua necessidade.
N
Nicksf13
Como assim? Tipo, toda vez que eu remover um item do hashmap inserir numa lista que indicam os números livres antes do primeiro da hashmap?
Usei uma pilha que é alimentada quando alguém é removido do hashmap, assim a próxima key será a key do último valor removido
A pilha resolveu seu problema?
Sugeri uma lista para que ela funcione como uma fila, onde o primeiro a entrar é o primeiro a sair. Caso você tenha mais de uma remoção antes de uma inserção no mapa, vai ter alguns valores de chave que vão ficar bastante tempo sem serem usados.
Agora, se a sua lógica garante que sempre vai ter uma remoção seguida por uma inserção, então pode usar a pilha tranquilamente.
A escolha entre pilha ou fila depende da sua necessidade.
Minha necessidade é bem básica, gerar keys de modo que não fique numa espécie de auto-incremento, pois como essa hashmap vai viver tendo valores adicionados e sempre será usada (a ideia é de ficar rodando o programa 24/7) to com medo de chegar um momento em que ela estoure (chegue no limite de inteiro)
EDIT: Mudei para uma queue de linked list, assim fará com que os números já usados sejam reciclados (como sugerido por você)