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
-~----------~----~----~----~------~----~------~--~---

Responder a