Arraylist

ola estou com probleminha ,

eu tenho uma arraylist que armazena varios dados de um banco de dados,

List<Pessoais> dados = new ArrayList<Pessoais> ();
Pessoais dadospessoais = new Pessoais ();

dadospessoais.setnome("");
dadospessoais.setvalor("");

dados.add(dadospessoais);


mas quando vou exibir os dados da list

for (i = 0; i < dados.size(); i++) {

System.out.println(dados.get(i).getnome());
System.out.println(dados.get(i).getvalor());

so imprime o ultimo valor e nao toda a lista .
na lista contem os :
azeitona , 23
caio , 43
marco, 23

so imprimi o ultimo

marco , 23
marco ,23
marco ,23

O que pode estar errado ?
alguem pode me ajudar ?

Se quer percorrer a lista, use um Iterator:

[code]Iterator<Pessoais> ite = dados.iterator();

while(ite.hasNext()){
Pessoais pes = ite.next();
System.out.println(pes.getnome());
System.out.println(pes.getvalor());
}[/code]

certeza que vc naum esta criando outra pessoa:

Isso:

Pessoais dadospessoais = new Pessoais &#40;&#41;;
dadospessoais.setnome&#40;&quot;1&quot;&#41;;
dadospessoais.setvalor&#40;&quot;1&quot;&#41;;
dados.add&#40;dadospessoais&#41;; 

dadospessoais.setnome&#40;&quot;2&quot;&#41;;
dadospessoais.setvalor&#40;&quot;2&quot;&#41;;
dados.add&#40;dadospessoais&#41;; 

dadospessoais.setnome&#40;&quot;3&quot;&#41;;
dadospessoais.setvalor&#40;&quot;3&quot;&#41;;
dados.add&#40;dadospessoais&#41;; 

Não é a mesma coisa que isso:

Pessoais dadospessoais = new Pessoais &#40;&#41;;
dadospessoais.setnome&#40;&quot;1&quot;&#41;;
dadospessoais.setvalor&#40;&quot;1&quot;&#41;;
dados.add&#40;dadospessoais&#41;; 

dadospessoais = new Pessoais &#40;&#41;;
dadospessoais.setnome&#40;&quot;2&quot;&#41;;
dadospessoais.setvalor&#40;&quot;2&quot;&#41;;
dados.add&#40;dadospessoais&#41;; 

dadospessoais = new Pessoais &#40;&#41;;
dadospessoais.setnome&#40;&quot;3&quot;&#41;;
dadospessoais.setvalor&#40;&quot;3&quot;&#41;;
dados.add&#40;dadospessoais&#41;; 

O que vc tah fazendo, criou uma Pessoa:

dadospessoais = new Pessoais &#40;&#41;;

Setou os dados e adicionou a lista, porém a lista não vai ter a copia dela e sim uma referencia a ela, se vc alterar ela, vc estara alterando a mesma referencia que esta na lista, portanto cada vez que vc altera, altera o que esta na lista. Logo no fim vc tera adicionado 3 vezes a mesma referencia na lista, e toda vez que vc faz os set’s vc esta alterando essa referencia.

Exemplo:

import java.util.ArrayList;
import java.util.List;

public class Teste &#123;

	static class Pessoa &#123;
		public int i;
	&#125;
	
	public static void main&#40;String&#91;&#93; args&#41; &#123;
		Pessoa p1 = new Pessoa&#40;&#41;;
		p1.i = 1;
		
		List&lt;Pessoa&gt; list = new ArrayList&lt;Pessoa&gt;&#40;&#41;;
		list.add&#40;p1&#41;;
		Pessoa p2 = list.get&#40;0&#41;;
		p2.i = 2;
		
		System.out.println&#40;p1.i&#41;;
		System.out.println&#40;p2.i&#41;;
	&#125;

&#125;

Repare que não vai mostrar 1 porque quando fiz p2.i = 2 estou alterando o mesmo objeto que p1 referencia, logo estou alterando p1.

:wink:

Por exemplo, fiz o seguinte codigo para testar :

    List&lt;Pessoais&gt; dados = new ArrayList&lt;Pessoais&gt; ();
    Pessoais dadospessoais = new Pessoais ();

dadospessoais.setnome(“Douglas”);
dadospessoais.setvalor(“21.0”);
dados.add(dadospessoais);

   dadospessoais.setnome("Caio");
   dadospessoais.setvalor("1.0");
   dados.add(dadospessoais);
   
   dadospessoais.setnome("marco");
   dadospessoais.setvalor("21.0");
   dados.add(dadospessoais);

Iterator<Pessoais> ite = dados.iterator();

while(ite.hasNext()){
Pessoais pes = ite.next();
System.out.println(pes.getnome());
System.out.println(pes.getvalor());
}

mas quando vai imprimir so aparece :
marco
21.0
marco
21.0
marco
21.0

ja tentei varias coisas diferentes e nada… Preciso de ajuda urgente !!

É o que eu te falei… leu?!

Olha a diferença, faz isso e vai funcionar…

	List&lt;Pessoais&gt; dados = new ArrayList&lt;Pessoais&gt; &#40;&#41;;
	Pessoais dadospessoais = new Pessoais &#40;&#41;;

	dadospessoais.setnome&#40;&quot;Douglas&quot;&#41;;
	dadospessoais.setvalor&#40;&quot;21.0&quot;&#41;;
	dados.add&#40;dadospessoais&#41;;

	dadospessoais = new Pessoais &#40;&#41;;
	dadospessoais.setnome&#40;&quot;Caio&quot;&#41;;
	dadospessoais.setvalor&#40;&quot;1.0&quot;&#41;;
	dados.add&#40;dadospessoais&#41;;

	dadospessoais = new Pessoais &#40;&#41;;
	dadospessoais.setnome&#40;&quot;marco&quot;&#41;;
	dadospessoais.setvalor&#40;&quot;21.0&quot;&#41;;
	dados.add&#40;dadospessoais&#41;;

	Iterator&lt;Pessoais&gt; ite = dados.iterator&#40;&#41;;

	while&#40;ite.hasNext&#40;&#41;&#41;&#123;
		Pessoais pes = ite.next&#40;&#41;;
		System.out.println&#40;pes.getnome&#40;&#41;&#41;;
		System.out.println&#40;pes.getvalor&#40;&#41;&#41;;
	&#125; 

Obrigado !

era ISSO mesmo !

é que sou novo em java.

valew

Aproveitando o topico do nosso amigo,

qual a diferença entre os dois codigos abaixo (qual seria o mais recomendado e pq?)

Codigo 1

   Iterator&lt;Pessoais&gt; ite = dados.iterator&#40;&#41;;

   while&#40;ite.hasNext&#40;&#41;&#41;&#123;
      Pessoais pes = ite.next&#40;&#41;;
      System.out.println&#40;pes.getnome&#40;&#41;&#41;;
      System.out.println&#40;pes.getvalor&#40;&#41;&#41;;
   &#125;

Codigo 2

    for&#40;Pessoais element &#58; &#40;List&lt;Pessoais&#41; dados&#41; &#123;
      System.out.println&#40;element .getnome&#40;&#41;&#41;;
      System.out.println&#40;element .getvalor&#40;&#41;&#41;;
    &#125;

Valeu!!!

Aproveitando o topico do nosso amigo,

qual a diferença entre os dois codigos abaixo (qual seria o mais recomendado e pq?)

Codigo 1

   Iterator&lt;Pessoais&gt; ite = dados.iterator&#40;&#41;;

   while&#40;ite.hasNext&#40;&#41;&#41;&#123;
      Pessoais pes = ite.next&#40;&#41;;
      System.out.println&#40;pes.getnome&#40;&#41;&#41;;
      System.out.println&#40;pes.getvalor&#40;&#41;&#41;;
   &#125;

Codigo 2

    for&#40;Pessoais element &#58; &#40;List&lt;Pessoais&gt;&#41; dados&#41; &#123;
      System.out.println&#40;element .getnome&#40;&#41;&#41;;
      System.out.println&#40;element .getvalor&#40;&#41;&#41;;
    &#125;

Valeu!!!