Isso. :¬)
Vlw Flavio!

Peter P. Lupo
Undergraduating in Computer Science DCC/UFRJ
Sun Certified Java Associate
http://pplupo.googlepages.com/
Cell. +55 (21) 81742487



Flavio Costa wrote:
> Remover elementos durante uma iteração só é seguro usando um
> Iterator.remove().
> O mesmo vale para qualquer operacao que modifique a estrutura de dados
> que está sendo iterada.
>
> Parte da API que fala sobre isso:
> http://java.sun.com/javase/6/docs/api/java/util/AbstractList.html#modCount
>
> Como um foreach é um loop com Iterator disfarçado, mas você não tem
> acesso a ele, logo remoções vão estragar a consistência da iteração.
>
> 2008/9/14 Leonardo Marques <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>>
>
>
>     Já que tocamos no assunto...
>     Em uma das reuniões, enquanto conversava com o professor sobre
>     iteradores, ele comentou que no for-each não é possível remover
>     elementos da coleção, eu disse que era possível sim com algum método
>     próprio da coleção (O remove() do ArrayList por exemplo), ele disse
>     que isso pode causar problemas pois removendo um elemento, o iterador
>     poderia ficar perdido e não saber quem é o próximo elemento da
>     coleção.
>     Então, é seguro ou não remover um elemento em um for each?
>
>     On 14 set, 21:03, Peter <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>> wrote:
>     > Espera, espera...
>     >
>     > Não só a dúvida original se perdeu como a dica se desvirtuou.
>     >
>     > Vamos por partes.
>     >
>     > Wander, acredito que sua referência para ArrayList esteja
>     declarado assim:
>     >
>     > (1) ArrayList<Heroi> herois;
>     > ou
>     > (2) ArrayList<String> herois;
>     >
>     > no caso 1, vc tem um ArrayList onde vc guardará referências para
>     > instâncias de heróis.
>     > Ou para simplificar, vc tem "um ArrayList de heróis".
>     >
>     > No caso 2 vc apenas guarda o nome dos heróis no ArrayList.
>     >
>     > O método LerLinha provavelmente retnora uma String, certo?
>     >
>     > Vc só pode guardar strings no array de Strings.
>     >
>     > Sugiro que vc crie um herói com o nome lido e adicione o herói
>     que vc
>     > criou no ArrayList.
>     >
>     > Seu problema era este?
>     >
>     > Quanto à dica, temos um pequeno histório a percorrer, para uma
>     > explicação didática.
>     > Percorrer uma coleção deve ser feito preferencialmente através de um
>     > iterator e não de métodos posicionais. Isto porque, como veremos
>     mais
>     > adiante no curso, há outras coleções que podem ser facilmente
>     > substituídas se tomarmos cuidado com os métodos que utilizarmos. Há
>     > coleções com características específicas de desempenho em
>     determinadas
>     > situações e o ideal é que possamos trocá-las sem dificuldade.
>     Portanto,
>     > para ter uma maneira uniforme de percorrê-las, devemos usar
>     Iterator,
>     > pois sua utilização é igual para todas as coleções:
>     >
>     > Iterator<String> it = a.iterator();
>     > while(it.hasNext()) {
>     >     System.out.print(it.next() + " ");
>     >
>     > }
>     >
>     > Durante muito tempo esta foi a forma de se percorrer coleções. No
>     > entanto, ela tem problemas. Ao terminar o while, o iterator fica
>     alocado
>     > e utilizá-lo (it.next()) gerará erros. Isto era uma possível (e
>     > constante) fonte de problemas.
>     > Outra questão é que ficamos com uma referência guardada para o
>     iterator
>     > que já poderia ser coletado.
>     >
>     > Assim, esta forma evoloui para:
>     >
>     > for (Iterator<String> it = a.iterator(); it.hasNext();) {
>     >     System.out.print(it.next() + " ");
>     >
>     > }
>     >
>     > Ficando agora a referência para o iterator válida apenas no
>     escopo do for.
>     >
>     > A partir do Java 5, esta forma foi "incorporada" com o que se
>     conhecia
>     > como "for each" e em java, "enhanced for":
>     >
>     > for (String nome : colecao) {
>     >     System.out.print(nome + " ");
>     >
>     > }
>     >
>     > Onde lemos "para cada nome na coleção...".
>     >
>     > E é assim a forma mais indicada para se percorrer uma coleção ou um
>     > vetor (vetores, daqueles com colchetes [] também pode ser
>     percorridos
>     > assim...) não só é mais prático como mais elegante e traz a
>     vantagem de
>     > que não precisaremos modificar o código se mudarmos a coleção que
>     > armazena os itens percorridos.
>     >
>     > Desculpem pelo e-mail longo. Ou foi necessário ou foi um erro meu de
>     > julgamento. *rs*
>     >
>     > Wander, como tá a dúvida cara? Já leu os métodos na API? Viu o
>     que eles
>     > fazem?
>     >
>     > Abraço!
>     >
>     > Peter P. Lupo
>     > Undergraduating in Computer Science DCC/UFRJ
>     > Sun Certified Java Associatehttp://pplupo.googlepages.com/
>     <http://pplupo.googlepages.com/>
>     > Cell. +55 (21) 81742487
>     >
>     > Vitor Maia wrote:
>     > > Verdade, como o ArrayList tem índices, pode ser usado o "for"
>     normal.
>     > > Iterator e for-each só são necessários em coleções em que não
>     há uma
>     > > sequência numerada de elementos, como o TreeSet.
>     >
>     > > 2008/9/14 Leonardo Marques <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>     > > <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>>
>     >
>     > >     Mais um detalhe, não é necessário iterador p/ percorrer
>     ArrayList,
>     > >     pode usar o for normal mesmo.
>     >
>     > >     On 14 set, 11:11, "Vitor Maia" <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>     > >     <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>> wrote:
>     > >     > Tenta fazer
>     > >     herois.get(0).setNomeVerdadeiro(objectLeitura.lerLinha());
>     > >     > Pra acessar elementos do ArrayList você tem que usar o get.
>     >
>     > >     > 2008/9/14 Wander <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]> <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>>
>     >
>     > >     > > Pô, me ajudou pra caramba, mas o meu caso é um pouco mais
>     > >     complicado
>     > >     > > pois a ArrayList tem um tipo que é uma classe, nesse
>     caso a classe
>     > >     > > SuperHeroi.Ou seja, não estou conseguindo acessar certos
>     > >     métodos. Por
>     > >     > > exemplo:
>     >
>     > >     > > Seja herois o nome da ArrayList. tentei fazer o seguinte:
>     >
>     > >     > > herois(0).setNomeVerdadeiro(objectLeitura.lerLinha());
>     //onde
>     > >     > > objectLeitura é uma instância da classe Console
>     >
>     > >     > > Mas não deu certo, eu pensei que poderia fazer esse
>     tipo de
>     > >     coisa já
>     > >     > > que herois(0) é uma instância de SuperHeroi, ou estou
>     enganado?
>     >
>     > >     > > > Wander, fiz um exemplo que adiciona, remove, exibe e
>     itera.
>     >
>     > >     > > > import java.util.ArrayList;
>     > >     > > > import java.util.Iterator;
>     >
>     > >     > > > public class Exemplo {
>     >
>     > >     > > >   public static void main(String[] args) {
>     >
>     > >     > > >     // Criando um ArrayList vazio para números inteiros
>     > >     > > >     ArrayList<String> a = new ArrayList<String>();
>     >
>     > >     > > >     a.add("a"); // Elemento adicionado na posição 0
>     > >     > > >     a.add("b"); // Elemento adicionado na posição 1
>     > >     > > >     a.add("c"); // Elemento adicionado na posição 2
>     >
>     > >     > > >     // Será impresso na tela o elemento na posição 0
>     > >     > > >     System.out.println(a.get(0));
>     >
>     > >     > > >     // Agora o elemento "d" é adicionado na posição 0,
>     > >     > > >     // empurrando todos os elementos já existentes
>     para a
>     > >     frente.
>     > >     > > >     a.add(0,"d");
>     >
>     > >     > > >     // Será impresso na tela o elemento na posição 0
>     > >     > > >     // outra vez. Desta vez é o "d".
>     > >     > > >     System.out.println(a.get(0));
>     >
>     > >     > > >     // Modos de iterar: Iterator e For-Each
>     > >     > > >     Iterator<String> it = a.iterator();
>     > >     > > >     while(it.hasNext()) {
>     > >     > > >       System.out.print(it.next() + " ");
>     > >     > > >     }
>     > >     > > >     System.out.println();
>     > >     > > >     //ou
>     > >     > > >     for(String i : a) {
>     > >     > > >       System.out.print(i + " ");
>     > >     > > >     }
>     > >     > > >     System.out.println();
>     > >     > > >     // Remove o elemento da posição 0
>     > >     > > >     a.remove(0);
>     > >     > > >     // Remove o primeiro "b" que for encontrado.
>     > >     > > >     a.remove("b");
>     >
>     > >     > > >     // Para conferir as remoções:
>     > >     > > >     it = a.iterator();
>     > >     > > >     while(it.hasNext()) {
>     > >     > > >       System.out.print(it.next() + " ");
>     > >     > > >     }
>     > >     > > >   }
>     >
>     > >     > > > }
>     >
>     > >     > > > 2008/9/14 Cleiton Menezes <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>     > >     <mailto:[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>>>
>     >
>     > >     > > > > Caro Wander, se você puder ser umpouco mais
>     específico com
>     > >     sua dúvida,
>     > >     > > eu
>     > >     > > > > posso te ajudar, por exemplo, que tipo de
>     manipulação vc
>     > >     não está
>     > >     > > > > conseguindo fazer? inserir, iterar, remover
>     elementos, é isso?
>     >
>     > >     > > > > 2008/9/14 Wander <[EMAIL PROTECTED]
>     <mailto:[EMAIL PROTECTED]>
>     > >     <mailto:[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>>>
>     >
>     > >     > > > >> Como faltei a maioria das aulas de ArrayList
>     estou tendo
>     > >     dificuldade
>     > >     > > > >> na manipulação de ArrayList, se puderem me ajudar
>     > >     postando um exemplo
>     > >     > > > >> simples que faça o adicionar e o exibir,
>     agradeço. Gostei
>     > >     muito do
>     > >     > > > >> exemplo que o professore deu dos Animais, mas já
>     não me
>     > >     lembro mais.
>     >
>     > >     > > > --
>     > >     > > > Vitor Carneiro Maiawww.dcc.ufrj.br/~vitormaia-
>     <http://Maiawww.dcc.ufrj.br/%7Evitormaia->
>     > >    
>     
> <http://Maiawww.dcc.ufrj.br/%7Evitormaia-><http://Maiawww.dcc.ufrj.br/%7Evitormaia->Ocultar
>     > >     texto entre aspas -
>     >
>     > >     > > > - Mostrar texto entre aspas -
>     >
>     > >     > --
>     > >     > Vitor Carneiro Maiawww.dcc.ufrj.br/~vitormaia
>     <http://Maiawww.dcc.ufrj.br/%7Evitormaia>
>     > >     <http://Maiawww.dcc.ufrj.br/%7Evitormaia>
>     >
>     > > --
>     > > Vitor Carneiro Maia
>     > >www.dcc.ufrj.br/~vitormaia
>     <http://www.dcc.ufrj.br/%7Evitormaia><http://www.dcc.ufrj.br/%7Evitormaia>
>
>
>
>
> -- 
> Flávio Coutinho da Costa
>
> >

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