Tava fazendo um método aqui que conta quanto cada letra apareceu repetidamente em uma frase.
Para isso, usei um HashMap. Entretanto, quando preciso atualizar a quantidade de vezes que um caractere aparece, eu preciso remover do HashMap e depois inseri-lo novamente com o novo valor. Alguem sabe se existe um meio de editar o valor sem ter que retirá-lo?
[code] public static void main(String[] args) {
Map<Character, Integer> repeticao = new HashMap<Character, Integer>();
System.out.print("Digite uma frase: ");
String frase = new Scanner(System.in).nextLine();
frase = frase.toUpperCase();
for (Character c : frase.toCharArray()) {
Integer qtd = repeticao.get(c);
if (qtd == null) {
repeticao.put(c, new Integer(1));
} else {
qtd++;
repeticao.remove(c); // removo
repeticao.put(c, new Integer(qtd)); //insiro a mesma letra com novo valor
}
}
for (Map.Entry<Character, Integer> o : repeticao.entrySet()) {
System.out.println("Letra: " + o.getKey() + " - Aparicao: "
+ o.getValue());
}
}[/code]
E nunca, mas NUNCA, altere o estado de um objeto que está contido num HashMap.
HashMap se baseia no cálculo do hashcode do objeto para decidir em que nó da sua estrutura interna ele irá armazenar o objeto. Assim, caso vc altere o estado de um objeto que está dentro do HashMap, faça a atualização do mesmo, através do put(chave, objeto).
Lembro da vez que perdi umas 2 horas tentando descobrir porque o meu objeto não estava retornando, e quando vi que ele estava dentro do hashMap, mas o get nãoe stava retornando, dai eu me lembrei do cálculo de hash.
[quote=renamed]Entendi, ja sabia q ele nao permitia repeticoes mas pra mim ele simplesmente jogava fora qnd havia repeticoes, mas na verdade ele atualiza =)
obg[/quote]
Na verdade ele perde a referência para o objeto que pertence a aquela chave!