Вы делаете:
localSolutions.clear();
Добавление списка в другой список не добавляет копию списка, он добавляет тот же объект списка. То, что делает ваш код во externalloop, - это заполнение того же списка элементами, его очистка и добавление в solutions
. solutions
содержит max
ссылок на тот же пустой список.
То, что вы хотите сделать, это:
ArrayList<ArrayList<Integer>> solutions = new ArrayList<ArrayList<Integer>>();
for(int i = 1; i <= max; i++) {
ArrayList<Integer> localSolutions = new ArrayList<Integer>();
for(int j = 1; j < i; j++) {
//System.out.println(j + "mod" + i + "=" + (j*j)%i);
if ((j*j)%i == 1) {
localSolutions.add(j);
}
}
//System.out.println(localSolutions.toString());
solutions.add(localSolutions);
}