Nenhuma das formas que vc citou é errada.
Nenhuma faz diferença em termos de memória.
Vc tem que lembrar que "agenda" é um monte de referências para os objetos
que estão na memória. Um deles é um ArrayList de telefones que é outro
conjunto de referências para outros objetos na memória (no caso, telefones).
Quando vc faz
ArrayList<Telefone> temp = agenda.get(nome);
Na prática vc está criando mais uma referência para o mesmo ArrayList (uma
dentro de agenda e outra que vc chamou de "temp"). Você não está criando uma
cópia de ArrayList. Então o consumo de memória a mais é irrisório.
Quanto a desempenho a questão é mais complicada.
Em via de regra, seu foco deve ser fazer um código legível. O máximo
possível. SE vc tiver problema de desempenho (o que vc só sabe depois que
rodar com a carga esperada de usuários e objetos criados simultaneamente) é
que vc deve alterar o código de forma a ganhar desempenho prejudicando a
legibilidade o mínimo possível, até atingir o desempenho desejado.
Aqui:
for(int i = 0;i < agenda.get(nome).size(); i++)
Pra cada iteração vc está procurando o arrayList dentro da agenda e o size
do arrayList, o que, de fato, vc poderia fazer de uma vez só.
O HashMap, não sei se o professor explicou, é uma estrutura que acha o que
vc pediu sem percorrer. Ela vai direto na posição onde estaria caso vc
tivesse adicionado e se tiver alguma coisa é ele, se não tiver nada não tem
no HashMap. Logo, o custo é pequeno. Se fosse outra estrutura que tivesse
que ser percorrida, o desempenho ficaria pior.
O size é mantido num atributo interno conforme vc adiciona e remove, logo
ele também não conta. Só retorna o valor.
O que eu faria:
ArrayList<Telefone> telefones = agenda.get(nome);
for(int i = 0;i < telefones.size(); i++) {
}
Só uma observação, vcs vão aprender o enhanced for, com o qual poderão fazer
simplesmente:
for (Telefone telefone : agenda.get(nome)) {
System.out.println(telefone);
}
Abraço!
Peter P. Lupo
Undergraduating in Computer Science DCC/UFRJ
MPS.BR Authorized Implementation Practitioner
Sun Certified Java Associate
http://sites.google.com/site/pplupo
Cell. +55 (021) 81742487
2009/9/28 Raul Barbosa <[email protected]>
> Olá,
> Estava fazendo a lista e tive uma dúvida (na verdade, mais uma
> curiosidade).
> Seguinte:
> Fazer algo desse jeito, isto é, chamar várias vezes o método:
>
> for(int i = 0;i < agenda.get(nome).size(); i++)
> {
>
> }
>
> Ou isso(atribuir valores a variaveis)
>
> ArrayList<Telefone> temp = agenda.get(nome);
> int tamanho = temp.size();
> for(int i =0; i < tamanho;i++)
> {}
>
> Eu exagerei, já que poderia simplesmente obter o int tamanho numa linha só,
> mas isso seria fazer um meio-termo entre essas duas maneiras acima
> descritas.
> Existe algo que possa ser considerado melhor em termos de uso de memória ou
> tempo de execução ou mesmo errado/correto em termos de linguagem/convenção?
> (aparentemente tudo resultou no mesmo aqui)
>
> Abraços
>
>
> --
> Raul B. Barbosa
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Comp
2 - Geral" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/comp2-geral?hl=en
-~----------~----~----~----~------~----~------~--~---