Hashmap itera por debaixo dos panos?

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