Modificando somente um atributo do Vector

tem jeito de eu modificar apenas uma célula do Vector:
por exemplo eu tenho o objeto pessoa.
os atributos: cabelo, cor e peso.
e eu quero setar apenas o peso.
o que eu devo fazer???

eu tenho a classe pessoa que tem seu construtor

Pessoa (String cab, String cor, String pes)
 {
  this.cab = cab;
  ...
 }

public String getcab()
 {
  return cab;
 } 	

ai quando eu estou modificando, eu modifico tudo
por exemplo:

Vector vectPessoa;

vectPessoa.set(0, new Pessoa (
((Pessoa)vectPessoa.elementAt(0)).getcab(),
((Pessoa)vectPessoa.elementAt(0)).getcor(),
10
));

não tem um jeito mais facil?
tem jeito de modificar só peso sem eu fazer isso tudo? como?
expliquem, por favor.

Voce pode fazer assim:

Pessoa p = (Pessoa)vectPessoa.elementAt(0);
p.setCabelo("loiro");

a referencia vai ser atualizada normalmente.

E porque vc nao usa ArrayList ao inves de Vector?

Rafael

vc diz então pra eu cliar o metodo:

public void setcab(String cab) 
{ 
  this.cab = cab; 
}    

tah certo o codigo?

tem q ter o set antes? por q?

ao inves do seu código

não seria mais interessante:

((Pessoa)vectPessoa.elementAt(0)).setcab("loiro");

anh?

[quote=“Heero”]vc diz então pra eu cliar o metodo:

public void setcab(String cab) 
{ 
  this.cab = cab; 
}    

tah certo o codigo?

tem q ter o set antes? por q?
[/quote]

Se vc fizer os setXxx, vc pode mudar propriedades especificas… Da maneira como vc fez originalmente, teria que ficar recriando o objeto toda vez, o que nao eh legal.

[quote=“Heero”]
ao inves do seu código

não seria mais interessante:

((Pessoa)vectPessoa.elementAt(0)).setcab("loiro");

anh?[/quote]

Soh seria mais “interessante” se voce somente fosse fazer uma unica alteracao. Se vc fosse alterar a cor e o cabelo, nao vale a pena ficar dando o elementAt() toda vez, ja que vc estaria fazendo buscas desnecessarias no vector.

Rafael

por que vc diz q não eh legal ficar recriando o objeto toda vez? mémoria? mais tempo de processamento? outros?

sempre tem q vir setXxx (onde Xxx eh alguma coisa), tem sempre q colocar setAlgumaCoisa, por q? por q não mudarXxx? anh?

Nao ha motivo para voce recriar a instancia toda vez por simplesmente nao fazer sentido, nao haver necessidade para tal. Voce estaria “agredindo” o sistema ao fazer isso. Voce reconstruiria uma casa inteira sempre que precisasse repintar ou mudar alguma porta?

[quote=“Heero”]
sempre tem q vir setXxx (onde Xxx eh alguma coisa), tem sempre q colocar setAlgumaCoisa, por q? por q não mudarXxx? anh?[/quote]

Eh nomenclatura padrao do Java, e requisito para certos frameworks. Leia http://java.sun.com/products/javabeans/docs/spec.html e vc ira entender.

Rafael

Obrigado mesmo!!!
valeu por tá me explicando!!!
legal sua explicação!
consegui compreender!
vou ler sobre o javabeans tbm!
tenho outra dúvida…
referente a testar se o Vector está vazio.

por q quando eu denomino o tipo e instancio:

Vector vectPessoa = new Vector();

não funciona o teste(pra testar se eh vazio) ou funciona eu q to fazendo errado:

if ((vectPessoa != null))

mas eu conseguir um jeito que é assim:

if(vectPessoa.size() > 0)

tah certo?
eh o melhor jeito?

Obrigado!

Eh o unico jeito. A comparacao com null serve para verifica se o teu objeto ja foi instanciado. Por exemplo,

Vector v;
if (v == null) {
    // sim, eh nulo
}

agora, quando vc faz

v = new Vector();

o teu objeto ja nao eh mais null, e voce pode usar os metodos da classe.

Note que se vc tentar usar o objeto sem ter uma instacia, dara erro na hora de executar, o famoso NullPointeException.

E, mais uma vez, utilize a classe ArrayList ao inves de Vector. ArrayList, historicamente, eh mais rapida que Vector.

Rafael

Lemrando que pro vazio vc pode usar o isEmpty() :wink:

Obrigado Rafael vc eh um bom mestre! Valeu tbm TedLoprao!!!
tem coisas que eu por exemplo, acredito tbm que muitos vão fazendo e não percebem os detalhes, pois estes saõ muito importantes, e agora eu to atentando bastante para os detalhes…

eu já li alguma coisa sobre ArrayList, mas nunca pus em prática, por que é mais interessante trabalhar com arrayList (além de ser mais rápida, isso com certeza já eh um ponto ótimo)? quais a diferenças sobre Vector? eh possivel eu interagir com o meu objeto Pessoa (visto acima) do mesmo esquema que Vector?

Obrigado!

ArrayList eh uma “evolucao” de Vector, assim como HashMap eh uma evolucao de Hashtable.

Vector e Hashtable sao da primeira versao do Java. A partir do Java 1.2 foi introduzido o “framework Collections”, que eh um set de interfaces e classes para manipulacao de listas, maps e afins.
De uma boa estudada em

http://java.sun.com/docs/books/tutorial/collections/

Esse eh um dos pontos mais importantes - e basicos - que voce deve conhecer bem do Java.

Rafael

valeu! não sabia de nada disso!
o java eh muito poderoso!!!
dei uma passada de olho, o tutorial eh muito grande vou ler com mais calma
me adianta soh uns itens pra ver se compensa passar minha aplicação pra arrayList, coisa básica, se possivel…

1-no ArrayList eu posso trabalhar no mesmo esquema do Vector, por exemplo interagir com a classe pessoa que eu tenho abaixo?

2-ele trabalha com celulas? tipo no Vector tinha cabelo, cor e peso, minha celula 0 por exemplo podia ser vermelho, preto, 60 minha celula 1 poderia ser azul, marrom,65 e por ai vai…, no ArrayList funcionaria da mesma maneira celula 0 poderia ser vermelho, preto, 60 minha celula 1 poderia ser azul, marrom,65 e por ai vai, assim?

Sim para tudo.

Rafael

andei dando uma lida e resolvi brincar de ArrayList

fiz um exemplo basico:

public class Teste
{
 ArrayList numero = new ArrayList();
 
 public Teste()
 {
   numero.add(1);
 }
....

tenho duas dúvidas:

é interessante eu tá instanciando um atributo como global --> "quando necessario"na hora que eu defino o tipo(eu soh programa assim, no exemplo tah assim), ou dentro do construtor ou dentro do metodo qeu eu vou usar ele ou tanto faz??? por q?

2- por q não aceita inteiro? como que eu faço pra por inteiro? interessante q aceita string…, e entrei na documentação e vi q tem q passar como parametro object, mas como q eu passo inteiro?

jah achei a resposta pra dúvida 2 …
eh:

numero.add(new Integer("1"));

isso?

agora tem a dúvida 1 (anterior) e outra:

como que eu comparo se eh diferente esse numero q eh um arraylist com o numero 2 por exemplo, tipo assim:

if (numero.get(0)!=2)

código acima errado!!!

eu sei q eu to comparando um objeto com um inteiro, mas como q eu faço essa comparação?

O metodo get() retorna um Objet, e int nao eh Object. O teu item contem um Integer, logo a comparacao deve ser para tal:

if (new Integer(2).equals(numero.get(0))) {
    // sao iguais
}

Rafael

continuo voltando a mexer com ArrayList…
como que eu faço pra uma variavel int:

int teste;

receber um valor objeto de ArrayList???
pois o arraylist contém soh objetos certo? como q eu faço pra
uma variável inteira receber o conteudo na posição (0)??

jah tentei:

teste = numero.get(0);

e não funcionou e outras tentativas.

ajudem!
obrigado!

alguem saberia a resposta por favor?

int teste = Integer.parseInt((String)lista.get(0));

Uma estudada nas classes basicas do Java vai te ajudar muito.

Rafael

o seguinte tah dando erro… (erro logico)
o meu arrayList dentro dele eh int
pois quando eu adiciono int:

lista.add(new Integer(i));

e eu tentei o seu comando e dah dando erro:

int teste = Integer.parseInt((String)lista.get(0)); 

vc tem certeza? ou sera q eh eu q to errando…

Valeu!