Lista não está sendo adicionada a lista de listas

Boa tarde galera, estou implementando um algoritmo genético aqui, e estou em uma parte que tenho que separar as soluçoes melhores em paretos, nos primeiros paretos ficam as melhores solucoes, eu separo cada solucao em uma lista auxiliar q, depois de passado toda a iteração eu pego essa lista q com todas as soluçoes selecionadas e adiciono para a lista de listas, o que acontece é que somente a primeira lista de solucoes está sendo adicionada, as demais não. Eu até verifico antes de adicionar as soluçoes presentes em q, e mesmo assim quando vou imprimir os valores atraves da listas de listas eu nao consigo.

Segue o código:

public void nonDominatedSortingII(boolean showPhaseI)
{
	boolean tag = true;
	int k=0;
	if(showPhaseI)
		nonDominatedSortingI(true,true,true);
	else
		nonDominatedSortingI(false,false,false);
	System.out.println("\n================================");
	System.out.println("Non-Dominated Sorting Phase II:");
	System.out.println("================================");
	while(tag==true)
	{
		tag=false;
		for(int i=0; i<N; i++)
		{
			// Verifica se nao existe nenhuma solucao que domina p(i)
			if (p.get(i).getNp() == 0 || p.get(i).getNp()==-1) 
			{
				tag=true;
				if(p.get(i).getNp()==-1)
				{
					p.get(i).np=0;
					continue;
				}
				if(k==0)
					q.add(p.get(i));
				p.get(i).setNp(-999); //inutilizando valores do front atual otimo para nao gerar loop infinito
				// para cada solucao com np=0, buscar as solucoes dominadas
				for (int j = 0; j < p.get(i).sp.size(); j++) 
				{
					int qi = p.get(i).sp.get(j); // posicao da solucao j(i), dominada por p(i)
					p.get(qi).np--; // reduz o np da solucao j(i) dominada em 1
					if(p.get(qi).getNp()==0 && i>qi)
						q2.add(p.get(qi));						
					if(p.get(qi).getNp()==0 && qi>i)
					{
						p.get(qi).np= -1;
						q2.add(p.get(qi));
					}	
				}
			}
		}
		if(k==0)
		{
			showSolucoesQ(true, true, true);
			paretos.add(q);
			k++;
		}
		showSolucoesQ2(true, true, true);
		if(q2.size()>0)
			paretos.add(q2);
		else
			tag=false;
		q2.clear();
	}
}

Resumindo, no trecho:
if(q2.size()>0) paretos.add(q2); Por mais que q2 tenha as solucoes corretas, na hora que vou imprimir os valores eu só consigo do primeiro pareto(da primeira lista) e não dos demais

O código para imprimir a lista das listas é este:

public void showParetos(boolean showF, boolean showNp, boolean showSp)
{
	System.out.println("\n\n Mostrando Paretos\n\n");
	System.out.printf("Tamanho dos paretos: %d\n", paretos.size());
	for(int i=0; i<paretos.size(); i++)
	{
		System.out.printf("Tamanho do %d Pareto = %d \n", i+1, paretos.get(i).size());
		for(int j=0; j<paretos.get(i).size(); j++)
		{
			for(Double k: paretos.get(i).get(j).f)
				System.out.printf("%.4f ",k);
			System.out.println();
		}
	}
}

O que eu percebo é que o tamanho das listas(paretos) depois do primeiro é 0, significando que não existe nenhuma solucao…

Após longa e intensa pesquisa, descobri que List.clear() era o problema, quando usava este comando a memória continuava alocada no mesmo local, mesmo com a lista limpa, e qualquer alteração feita na variavel q2 utilizada ia alterar dentro da lista de listas que ela estava alocada, logo a solucao foi utilizar o comando:
q2 = new ArrayList<P>(); no lugar de q2.clear()