HashMap

12 respostas
Balena

Minha dúvida é existe alguma maneira de retirar todas as ocorrências de um objeto em uma HashMap de uma única vez?

12 Respostas

Andre_Fonseca

oi

sim, vc pode usar Iterator, assim

public static void main(String[] argv) {

    // Construct and load the hash. This simulates loading a
    // database or reading from a file, or wherever the data is.

    Map map = new HashMap();

    // The hash maps from company name to address.
    // In real life this might map to an Address object...
    map.put("Adobe", "Mountain View, CA");
    map.put("IBM", "White Plains, NY");
    map.put("Learning Tree", "Los Angeles, CA");
    map.put("Microsoft", "Redmond, WA");
    map.put("Netscape", "Mountain View, CA");
    map.put("O'Reilly", "Sebastopol, CA");
    map.put("Sun", "Mountain View, CA");

    // List the entries using entrySet()
    Set entries = map.entrySet();
    Iterator it = entries.iterator();
    while (it.hasNext()) {
      Map.Entry entry = (Map.Entry) it.next();
      System.out.println(entry.getKey() + "-->" + entry.getValue());
    }
  }

fonte: http://www.java2s.com/Code/Java/Collections-Data-Structure/DemonstratetheHashMapclassandanIterator.htm

O

Melhor que pude pensar:

while (mapa.values().remove(objetoQueVoceQuerRemover));

Mas o remove vai testar desde o começo da lista a cada iteração do while.

Lavieri

Bom HashMap so aceita Key unicas (como todo map) então acredito que vc esteja falando do value da entry…

a forma de fazer seria

Object valorParaRemover = .... Iterator<Entry> entradas = mapa.entrySet().iterator(); while (entradas.hasNext() ) { //equanto houver entradas if (entradas.next().getValue().equals(valorParaRemover)) //verifica se o valor é para ser removida entradas.remove(); //e então remove }

Balena

OK as duas maneiras são válidas e interessantes, mas na minha HASH existem valores repetidos, e preciso comparar esses objetos pra selecionar o menor…

Dei uma olhada no EntrySet mas não sei como utilizá-lo alguém sabe?

De qualquer forma obrigado.

Andre_Fonseca

o entrySet te retorna um conjunto, que por definição não possui elementos repetidos, então não vai te ajudar …

Balena

Obrigado André pela atenção o que eu precisava era exatamente o que o Lavieiri disse…

Obrigado a todos pela ajuda

O

Claro que eu pensei em testar o valor dentro da iteração, mas você pediu “de uma única vez”. E agora você me deixou confuso, como você quer pegar o menor valor de uma lista de valores iguais? Afinal, se entendi você quer remover todas as ocorrências (logicamente iguais) de um objeto do mapa. Como o Lavieri disse, é pra supor que você está falando dos valores e não das chaves. Agora se por “menor” você está falando do índice na lista complicou porque citando a documentação: This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.

Balena

desculpe me expressei mal, na verdade o que eu precisava era exatamente pegar toda ocorrência de um objeto igual ou similar, e com oque foi falado eu consigo fazer.

Lavieri

Lembre-se… caso vc não esteja usando Objetos existentes na API java, ou seja… se seus Key ou seus Value forem objetos criado por vc… vc tera que se preucupar em implementar corretamente “equals” e “hashcode” caso contratio um objeto HashMap falha completamente ^^

qualquer outra duvida manda as ordens ^^

O

outra solução:

for (Iterator iterator = mapa.values().iterator(); iterator.hasNext();) { if (iterator.next().equals()) { iterator.remove(valorParaRemover); } }

C

Alguem poderia dizer-me como posso mudar uma hashmap para uma string ou guardar um array num hashmap?
O objectivo é comparar duas string de um array de linhas diferentes, estou a elaborar um projecto que consiste num zoo e tem de encontrar uma relaçao entre animais e habitats, que neste caso é AR1

ANIMAL|A1|Alex|C8|normal|AR1
HABITAT|AR1|Aldeia dos Macacos|20|T3,01,30,T2

estou a usar um bufferedReader para ler cada linha do ficheiro que tive de importar ( as duas linhas acima sao exemplos de linhas do ficheiro).

Gostava de saber se há uma maneira de passar para string depois d guardar cada palavra separada pelo | no array. (usei  um split para faze-lo)

preciso disto para depois dizer que o animal tal pertence ao habitat tal;
O

Peraí, você tem uma String, quebra ela numa String[], daí quer voltar? Pra que? O que você fez com a primeira String que não pode ser mais usada? Acho que não entendi sua dúvida.

Em todo caso, se quer concatenar numa String os elementos de um array, uma solução seria, hum… iterar no array e concatenar seus elementos! :shock:
Ou então use isso aqui.

Ah, e coloque sua dúvida numa tópico próprio. flw.

Criado 9 de maio de 2009
Ultima resposta 27 de mai. de 2010
Respostas 12
Participantes 5