Estrutura similar a um HashMap

6 respostas
Z

Bom dia, pessoal

Existe algum tipo de estrutura similar a um HashMap que possua um método para busca de chaves iguais?

O que gostaria de fazer é mais ou menos o seguintes:

Tenho um HashMap com vários dados, porém alguns dados possuem códigos ( chaves ) iguais. Map<String,Objeto>

Quando solicito uma destas chaves, o Map me retorna a primeira encontrada.

Não queria fazer um FOR pra buscar em todas estrutura pois tratam-se de 20.000 registros :lol:

Existe uma maneira mais eficaz de fazer isto?

vlw :wink:

6 Respostas

Rodrigo_Sasaki

Não tem como você ter um HashMap com chaves iguais.

gmmascarin

Como o digaoneves escreveu isso não é possível. Acredito que você poderia resolver seu problema criando um Map e associando a uma lista de objetos, assim: Map <String, Lista>. Dessa maneira a chave estará ligada a uma lista de objetos. Quando você solicitar a chave receberá todos os objetos a ela associados.

pmlm

O Map não retorna a primeira encontrada, retorna A encontrada.

Ao colocar dois objectos com a mesma chave no HashMap, o segundo vai sobrepor-se ao primeiro.

A solução é mesmo teres um HashMap com uma lista. Claro que depois tens de ter sempre o cuidado ao inserir no map par validar se a chave já existe ou não.

Mais ou menos assim:

HashMap map = new HashMap<String, List<Object>>();

void add(String key, Object o){
    if (!map.containsKey(key)){
        map.put(key, new ArrayList<Object>();
    }
    map.get(key).add(o);
}

List<Object> get(String key){
    return map.get(key);
}
C

Existe uma biblioteca de classes utilitarias do google chamada Guava, que também possui implementações alternativas para collections http://code.google.com/p/guava-libraries/wiki/NewCollectionTypesExplained

Provavelmente ai voce acha alguma collection que lhe seja util

Z

Obrigado pessoal.

Não havia pensado desta forma, mas acredito que com isto já dê pra resolver o problema: Um Map contendo List.

Não sabia também desta informação! Obrigado! :smiley:

pmlm

Dá jeito ler a documentação :slight_smile:

Criado 19 de junho de 2012
Ultima resposta 19 de jun. de 2012
Respostas 6
Participantes 5