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