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.
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.
[quote=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.
[/quote]
Olá.
Qual o critério para se substituir determinado objeto em determinada posição?
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?
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
}
[quote=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?
[/quote]
Acho que não é bem assim…
Quando se faz um add em um ArrayLIst ele coloca na próxima posição, por exemplo:
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.