ArrayList

Olá amigos eu estou com o seguinte problema, eu tenho um método de uma classe que gera uma rota para uma determinada cidade, esse método retorna um HashMap<Integer,ArrayList>, onde eu tenho os indíces das rotas geradas armazenados como integer, e a propría rota armazenada em um ArrayList, no método main de outra classe eu criei dois ArrayList para armazenar duas rotas geradas pra duas cidades, o problema é quando eu tento pegar as rotas do primeiro ArrayList ele está com o mesmo valor do segundo ArrayList, ou seja, ambos estão armazenando a segunda rota gerada.Eis meu código :

        ArrayList lista  = new ArrayList();
        ArrayList lista2  = new ArrayList();
        Rota rtr = new Rota();
        rtr.gerarRota("U");
        rota = rtr.getRota();
        lista.add(rota.get(0));
        lista.add(rota.get(1));
        lista.add(rota.get(2));
        rtr.limparCidades();
        rtr.gerarRota("P");
        rota = rtr.getRota();
        lista2.add(rota.get(0));
        lista2.add(rota.get(1));
        lista2.add(rota.get(2));
        for(int index = 0; index < 3; index++){
            String g1 = rtr.concatenar(lista.get(0).toString());
            String g2 = rtr.concatenar(lista2.get(index).toString());
            System.out.println(g1);// possui o valor = ao do g2
            System.out.println(g2);// 
            ag.cruzamento2(g1,g2);
        }
    }

Abraços a todos._