Hum... Eu realmente achei muito mais inteligível se eu criasse uma nova referência para "agenda.get(nome)", tanto que estava fazendo assim. Mas eu fui por curiosidade implementar de uma outra forma. Valeu Peter! Obrigado pela resposta.
Abraço 2009/9/28 Peter P. Lupo <[email protected]> > Sobre a legibilidade do código: > http://craftnicely.blogspot.com/2009/09/voce-comenta-seu-codigo.html > > 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 Peter P. Lupo <[email protected]> > > 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 >>> >>> >>> >> > > > > -- 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 -~----------~----~----~----~------~----~------~--~---
