.clone();

Olá amigos, tenho uma matriz chamada aux_distancia que é um clone de outra matriz chamada “distancia”.
O problema é o seguinte: Criei a matriz aux_distancia para poder alterar alguns valores a medida em que ele é acessada. Entretanto, a alteração que faço na matriz aux_distancia, ocorre também na matriz distancia que está em outra classe, alterando assim seus valores originais, e isso não posso deixar que aconteça. O que devo fazer nesse caso?

segue o trecho da matriz:

aux_distancia = new ArrayList<ArrayList>((ArrayList<ArrayList>) AG_PMPC_Matriz_Distancia.distancia.clone());

Desde já obrigado!

Você está clonando a lista, mas os objetos não.

Ao invés de clonar a lista, use por exemplo um for e clone cada objeto da lista.

package teste;

import java.util.Arrays;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Matriz implements Cloneable {

    String info;

    public Matriz(String valor) {
        this.info = valor;
    }

    public String getInfo() {
        return info;
    }

    public static void main(String[] args) {

        Matriz[][] matriz = {
            {new Matriz("a"), new Matriz("b"), new Matriz("c")},
            {new Matriz("d"), new Matriz("e"), new Matriz("f")}};
        Matriz[][] auxiliar = new Matriz[matriz.length][matriz[0].length];

        try {
            for (int linha = 0; linha < matriz.length; linha++) {
                for (int coluna = 0; coluna < matriz[linha].length; coluna++) {
                    auxiliar[linha][coluna] = (Matriz) matriz[linha][coluna].clone();
                    auxiliar[linha][coluna].info += " auxiliar";
                    System.out.print("[" + matriz[linha][coluna].info + "] [" + auxiliar[linha][coluna].info + "]");
                }
                System.out.println("");
            }
        } catch (CloneNotSupportedException ex) {
            Logger.getLogger(Matriz.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}