Isso ocorre porque vc está alterando o mesmo objeto… a lista só tem a refência para o objeto e não o objeto em si, quando vc “copia” para a outra lista, vc esta copiando a referencia para o objeto, ou seja, ambas listas terão referência para o mesmo objeto, alterando ele, vai alterar nas duas.
para resolver isso, vc tem que adicionar uma cópia do objeto na outra lista, e para criar essa cópia vc usa o método clone de Object… mas para isso funcionar seu objeto disciplina tem que implementar Cloneable:
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Cloneable.html
e sobrescrever esse método clone de Object (conforme a documentação)
http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Object.html#clone()
se sua classe tiver atributos que são outros objetos, esses objetos também tem que ser Cloneable e assim por diante, até obter um “clone” de tudo que precisa, ai vc vai ter um outro objeto idêntico ao primeiro na memória, e esse pode alterar tranquilo.
E seu método add ficaria assim:
for (Disciplina d2 : discplinas) {
try {
discplinas_temp.add((Disciplina) d2.clone());
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
ps: apriveita e ja troca o nome do seu objeto Disciplinas para Disciplina (sem o S), ja que provavelnente uma instancia desse objeto não representa varias disciplinas e sim apenas uma certo?!
flw