Когда последний элемент повторяется при печати после цикла for, это почти наверняка связано с отсутствием объявления новых переменных (и, следовательно, не новой памяти). Например:
List <Integer[]> arrayOuter = new ArrayList <> ();
Integer[] array = new Integer[] {1, 2, 3, 4};
for (int i = 0; i < 4; i++) {
//shuffle array
Collections.shuffle(Arrays.asList(array));
//add array to arraylist
arrayOuter.add(array);
}
Если последний результат шаффла был {4, 2, 1, 3}, он напечатал бы {4, 2, 1, 3} 4 раза, потому что я объявил массив, вставляемый один раз, и поэтому все элементы указывают на один массив (и каждая итерация перезаписывает предыдущую итерацию). Правильным способом было бы объявить новый массив в каждой итерации цикла, например:
List <Integer[]> arrayOuter = new ArrayList <> ();
for (int i = 0; i < 4; i++) {
Integer[] array = new Integer[] {1, 2, 3, 4};
//shuffle array
Collections.shuffle(Arrays.asList(array));
//add array to arraylist
arrayOuter.add(array);
}
Еще один виновник, о котором я могу подумать, это то, что ваш ключ, outletCode остается неизменным, и вы перезаписываете свой предыдущий (ключ, значение) каждую итерацию цикла.