Modificacao em objeto parece estranha

pessoal,

se eu guardo os individuos em alguma estrutura de dados antes de modifica-los e depois de modifica-los, os objetos que foram guardados antes da modificacao sao guardados como se tivessem sido guardados apos a modificacao. Alguem tem alguma explicacao para isso ?

antes da modificacao:
individuo1 = 12345
individuo2 = 67890

Apos modificacao:
individuo1 = 10354
individuo2 = 26987

Apos essa modificacao, mando imprimir os quatro elementos, ou seja, os dois antes da modificacao e os dois depois da modificacao.
A impressao deveria ser:
12345
67890
10354
26987

Entretanto, esta sendo:
10354
26987
10354
26987

Eu guardo em um List de individuos antes e depois da modificacao. Ja tentei ate usar um List auxiliar para resolver esse problema, mas nao adiantou nada. Podem ajudar ?


public void crossover(Individuo individuo1, Individuo individuo2)
	{
		Random random = new Random();
		
		Integer indiceAux;
		
		Integer conta=0;
		
		Integer trocas = 1 + random.nextInt(6);
		
		Integer indice = random.nextInt(8);
		indiceAux = indice;
		
		Integer elemento1 = individuo1.getInd().get(indice);
		
		Integer elemento2 = individuo2.getInd().get(indice);
		
		individuo1.getInd().set(indice, elemento2);
		
		individuo2.getInd().set(indice, elemento1);
		
		trocas++;
		
		//se entrar aqui entao houve crossover e deve-se fazer mais ate todos os elementos de cada lista
		//serem todos diferentes
		while(conta(individuo1,elemento2)>1)
		{
			if(conta==trocas)
			{
				elemento1 = individuo1.getInd().get(indice);
				
				Integer novIndice2 = novoIndice(individuo2, elemento2, indiceAux);
				
				elemento2 = individuo2.getInd().get(novIndice2);
				
				individuo1.getInd().set(indice, elemento2);
				
				individuo2.getInd().set(indiceAux, elemento1);
			}
			else
			{
				Integer novIndice = novoIndice(individuo1, elemento2, indice);		
				
				elemento1 = individuo1.getInd().get(novIndice);
				
				elemento2 = individuo2.getInd().get(novIndice);
				
				individuo1.getInd().set(novIndice, elemento2);
				
				individuo2.getInd().set(novIndice, elemento1);
				
				conta++;
				
				indice = novIndice;
			}
		}
		
		individuo1.setFitness(individuo1.getInd());
		individuo2.setFitness(individuo2.getInd());
	}

Cara,

O que ta rolando é que vc está alterando o mesmo objeto… tentei separar as lists… ou fazer uma cópia…