Pessoal, acho que o titulo ja fala tudo. Itera ou não itera? ele ja automagicamente pega la o valor ou nao? Itera um por um comparando a chave que voce passou?
Mais ou menos. Ele itera pelos valores caso haja conflito na chave (i.e, dois objetos sendo mapeados para a mesma chave). Por isso é importante ter uma boa função hash e implementar o método equals().
[]'s
eu cosnigo pegar procurando cada um pelo valor 123?
public static void main(String[] args) {
HashMap<Integer, Teste> map = new HashMap<Integer, Teste>();
Teste objeto = new Teste();
objeto.valor = 123;
map.put(1, objeto);
Teste ae = map.get(1);
System.out.println(ae.valor);
}
fiz desse jeito procurando pela chave…
mas agora quero procurar pelo atributo valor. tem como?
Conseguir consegue, mas é MUITO mais lento, visto que no pior caso você precisará percorrer toda a estrutura de dados, enquanto com uma boa função de hash, o tempo de busca é praticamente constante, ou seja, O(1).
O que você tem que fazer é (para buscar a(s) entrada(s) por valor):
[code]import java.util.*;
public class Foo {
public static void main( String[] args ) {
Map<Integer, String> map = new HashMap<>();
map.put( 1, "foo" );
map.put( 2, "bar" );
map.put( 3, "foobar" );
map.put( 4, "bar" );
String procurarPor = "bar";
for ( Map.Entry<Integer, String> cv : map.entrySet() ) {
if ( cv.getValue().equals( procurarPor ) ) {
System.out.println( "Achou! " + cv );
}
}
}
}[/code]
Inclua os dois campos na geração do seu hashCode, ué. (Não esquecendo de checar se as regras para manter o equals permanecem, também).
[]'s
tem como eu fazer uma lista, e jogar o hashmap la dentro? porque agora quero popular uma list pra poder depois iterar e pegar os dados
Ter, tem. Mas seu design vai ficar extremamente feio.
Porque você não explica, exatamente, o que você está procurando? De repente, a solução mais elegante e ótima está embaixo do seu nariz e você não está vendo.
[]'s
oque eu quero é discutir sobre oque da ou nao com hashmap mesmo.
oque eu quero é: pegar uma lista pelo struts, usar a facilidade de ver se tem x chave como no hashmap.
e retornar pro struts em forma de lista ou, iterar no struts em hashmap mesmo