[quote=ViniGodoy]PS: Apesar do containsKey parecer extremamente complexo, o que ele faz é percorrer uma árvore, e decidir se um elemento já está no mapa, o que ele em 2 ou 3 testes. Muito menos que identificar isso num list. É rápido que o tempo dificilmente será um problema. E, como eu falei, sempre pode-se recorrer ao HashMap.
Ainda asim, você ainda pode poupar um pouco e usar através do get, assim:
[code]
Map<String, Integer> map = new TreeMap<String, Integer>();
for (String nome : listaDeNomes) {
Integer cont = map.get(nome);
map.put(nome, cont == null ? 1 : cont+1);
}
for (Map.Entry<String, Integer> entry : contagem.entrySet()) {
System.out.println("Nome: " + entry.getKey() + " Cont: " + entry.getValue());
}[/code]
E, como eu disse, só para totalizar a lista toda, como seria desejável numa função estatística, ou num total de relatório, ou em outras situações práticas, que seu método é extremamente ineficiente. Para totalizar um único elemento, ok, ele vai ter uma performance um pouco melhor, mas só com milhares de elementos para diferença ser perceptível.
O problema seria que, para totalizar a lista toda, seu método teria que ser chamado várias vezes: uma para cada nome dentro da lista. Se alguém achar uma solução tão fácil de implementar quanto e melhor que o map, sou todo ouvidos.
O que significa que o seu método fica ineficiente numa escala exponencial, quando usado para todos os nomes do list. Gosto de ressaltar situações assim, porque geralmente testamos com poucos elementos no desenvolvimento, e a surpresa virá só em bases de produção.
A solução com o map tem um acrescimo linear de tempo.[/quote]
Concordo plenamente!!!