método add de um List

10 respostas
P

1 - É possível ter uma list de um objecto do meu tipo, aonde cada vez que adicione um objecto, ele substitua um objecto já existente, em vez de adicionar no fim da lista?

Por exemplo:

List<MyObject> l = new ArrayList<MyObject>();
MyObject m1 = new MyObject()
MyObject m2 = new MyObject()
l.add(m1);
l.add(m2);

System.out.println(l.size()); <--- tamanho 1.

O MyObject é um objecto serializável e com bastantes variáveis de tipos criados por mim.

10 Respostas

mapleplayer

Se eu não me engano implementações de Map fazem algo parecido com o que você quer.
Quando você atribui algum valor à alguma chave já existente, o valor antigo é substituído pelo novo.

otaviojava

Acredito que desse modo dará certo

Object objeto=new Object();
Object objeto2=new Object();
List<Object> objs=new ArrayList<Object>()
objs.add(objeto);
int i=objs.indexOf(objeto);
objs.add(i, objeto2);
R

pedrosacosta:
1 - É possível ter uma list de um objecto do meu tipo, aonde cada vez que adicione um objecto, ele substitua um objecto já existente, em vez de adicionar no fim da lista?

Por exemplo:

List<MyObject> l = new ArrayList<MyObject>();
MyObject m1 = new MyObject()
MyObject m2 = new MyObject()
l.add(m1);
l.add(m2);

System.out.println(l.size()); <--- tamanho 1.

O MyObject é um objecto serializável e com bastantes variáveis de tipos criados por mim.

Olá.
Qual o critério para se substituir determinado objeto em determinada posição?

P

Isso quer dizer que quando se faz um add num ArrayList, o método vai gerar uma chave que é o apontador para o objecto e é esse apontador que é inserido na lista?

otaviojava

Ele se eu não me enganado verifica usando o método equals ou o hascode;
Então acho interessante que você sobrescreva esses dois métodos desses dois objetos.

@Override
    public boolean equals(Object obj) {
//codigo
}
@Override
    public int hashCode() {
//codigo
}
drigo.angelo
pedrosacosta:
Isso quer dizer que quando se faz um add num ArrayList, o método vai gerar uma chave que é o apontador para o objecto e é esse apontador que é inserido na lista?


Acho que não é bem assim..

Quando se faz um add em um ArrayLIst ele coloca na próxima posição, por exemplo:
List<Aluno> alunos = new ArrayList<Aluno>();
alunos.add(joao);
alunos.add(jose);
System.out.println(alunos.get(1).getNome);
System.out.println(alunos.get(2).getNome);
alunos.set(2, marcos);
System.out.println(alunos.get(2).getNome);

Resultado:
João
José
Marcos
Ou seja, o valor passado para os metodos get/set (o índice) é apenas a posição do elemento na lista..
otaviojava

Só salientando é que o índice começa pelo 0 e não pelo 1

paulo1911

Olá pedrosacosta,

Primeiramente vc deve sobrescrever os métodos equals e hascode do seu MyObject, em seguida vc pode utilizar o Set para adicionar somente objectos distintos em sua coleção, evitando objetos duplicados com o meso valor ou que seja equivalentes…

Veja:

Set<MyObject> colecao = new HashSet<MyObject>();  
 MyObject m1 = new MyObject()  
 MyObject m2 = new MyObject()  
 colecao .add(m1);  
 colecao .add(m2);  
  
 System.out.println(colecao.size()); <--- tamanho 1.

Espero ter ajudado!
Fallow Abraço

M

Você ainda não disse qual o critério para substituir.

mews

raf4ever:
Olá.
Qual o critério para se substituir determinado objeto em determinada posição?

Existem duas formas:
Se você souber o objeto que você quer retornar e não sabe a posição dele, você utiliza:

minhaLista.indexOf(meuObjeto);

Se você tem o índice do seu objeto no array mas não o tem, você deve utilizar o método get()

minhaLista.get(posicaoObjeto);
Criado 3 de janeiro de 2011
Ultima resposta 3 de jan. de 2011
Respostas 10
Participantes 8