Referência incorreta!

Gente, estou tentando resolver o problema da mochila com Algortimo Genetico, e pra isso, eu tenho uma classe Objeto, com as caracteristicas dos mesmos, e outra classe Mochila, que possui um Vector desses objetos. Cada objeto que for escolhido para ser carregado passa a ter um campo com o valor 1, e o restante valor 0. Acontece que, eu também tenho um ArrayList<Vector> que é uma população, com as 10 soluções escolhidas, e neste array, chamado “populacao”, eu insiro os vetores de objetos, cada um com uma sequencia de 0 e 1 diferentes. Só que após inserí-los, eu imprimo o ArrayList, e só imprime (10 vezes) o último Vector inserido, alguém me ajuda?

[code]
package problemamochila;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.Vector;

public class Mochila {

private double carga;
private Vector<Objeto> objetos_disponiveis; 
private ArrayList<Vector<Objeto>> populacao;

public Mochila(double carga, Vector<Objeto> objetos_disponiveis) {
    setCarga(carga);
    populacao = new ArrayList<Vector<Objeto>>();
    this.objetos_disponiveis = objetos_disponiveis; // Pego de um arquivo os objetos com suas informações e salvo nesse Vector, no main, e jogo pro dessa classe.
}

public Mochila() {

}

public void Zera() {
    for (int i = 0; i < objetos_disponiveis.size(); i++) {
        objetos_disponiveis.get(i).setUsado(0); // Pra deixar todos como não usados.
    }
}

public double somaCarga() {
    double sum = 0;

    for (int i = 0; i < objetos_disponiveis.size(); i++) {
        if (objetos_disponiveis.get(i).getUsado() == 1) {
            sum = sum + objetos_disponiveis.get(i).getPeso();
        }
    }
    return sum;
}

public void metodoRandomico() {
    while (populacao.size() < 10) { 
        int cont = 0;

        Random r = new Random();
        Zera();

        while (true) {
            i = r.nextInt(objetos_disponiveis.size());
            if (getCarga() >= somaCarga() + objetos_disponiveis.get(i).getPeso()) {
                objetos_disponiveis.get(i).setUsado(1);
                cont = 0;
            } else {
                cont++;
                if (cont > 10) {
                    break;
                }
            }
        }
        populacao.add(objetos_disponiveis);
        System.out.print("\nsizeX: " + populacao.size() + "|"); // Aqui e na linha debaixo é só pra imprimir as soluções diferentes geradas.
        
        print2(); 
    }

    for (int i = 0; i < populacao.size(); i++) { //Aqui imprime o Array preenchido, mas só sai com o último Vector inserido.
        System.out.print("\nsizeZ: " + i + "|");
        for (int j = 0; j < populacao.get(i).size(); j++) {
            System.out.print(" " + populacao.get(i).get(j).getUsado());
        }
    }

}

public void print2() {

    for (int j = 0; j < objetos_disponiveis.size(); j++) {
        System.out.print(" " + objetos_disponiveis.get(j).getUsado());
    }
}

public int getTamanhoPopulação() {
    return populacao.size();
}


public void printObjetosEscolhidos() {
    for (int i = 0; i < objetos_disponiveis.size(); i++) {
        if (objetos_disponiveis.get(i).getUsado() == 1) {
            objetos_disponiveis.get(i).print();
        }
    }
}


public double getBeneficio(int indice) {
    double beneficio_total = 0;
    for (int j = 0; j < populacao.get(indice).size(); j++) {
        if (populacao.get(indice).get(j).getUsado() == 1) {
            beneficio_total = beneficio_total + populacao.get(indice).get(j).getBeneficio();
        }
    }

    return beneficio_total;

}

public Vector<Objeto> getObjeto(int indice) {

    return populacao.get(indice);

}

public void printVetorSolucao() {
    for (int i = 0; i < populacao.size(); i++) {
        System.out.print("\nsize: " + i + "|");
        for (int j = 0; j < populacao.get(i).size(); j++) {
            System.out.print(" " + populacao.get(i).get(j).getUsado());
        }
    }
}

public void setCarga(double carga) {
    this.carga = carga;
}

public double getCarga() {
    return carga;
}

public void print() {
    System.out.println("\nCarga Total: " + somaCarga() + "\nVetor solução: ");
    printVetorSolucao();

}

}[/code]

Alguém me salva?

Veja essa linha:

 populacao.add(objetos_disponiveis); 

Você adiciona objetos_disponiveis (em Java, a boa prática é usar camel case), mas ele só é criado uma única vez no construtor.

Cada vez que adiciona na população, você precisa passar um objeto diferente. Seja dando new, clone, etc.