Когда вы составляете список списков, он не копирует значения - он копирует ссылку в список источников. Итак, когда вы
WP.add("A");
WP.add("B");
WPL.add(WP);
WP.clear(); //this also clears the values in WPL since WPL doesn't store A and B, it stores a reference to WP.
WP.add("C");
WP.add("D");
WPL.add(WP);
Чтобы решить эту проблему, я рекомендую создать новый список для каждого элемента, который необходимо добавить в него. Но также будьте осторожны, чтобы любые изменения исходных исходных списков также отражались в WPL. Вы также можете просто установить WP в новый экземпляр ArrayList (если вам нужно ссылаться на старый ArrayList, вы можете получить к нему доступ через WPL, так как WPL фактически сохраняет ссылку на него, а не напрямую).
List<List<String>> WPL = new ArrayList<List<String>>();
List<String> WP = new ArrayList<String>();
WP.add("A");
WP.add("B");
WPL.add(WP);
WP = new ArrayList<String>();
WP.add("C");
WP.add("D");
WPL.add(WP);
for(List<String> a : WPL) {
System.out.println(a.indexOf(a));
for (String i : a)
{
System.out.println(i);
}
}
Вот хорошее видео, чтобы посмотреть, что описывает разницу между ссылочными типами и типами значений, если вы хотите, чтобы узнать немного больше о том, что происходит (я бы рекомендовал делать .. это тема, которую вы вероятно, встретится снова в будущем).
https://www.youtube.com/watch?v=eRfvgSvf-mM
'a.indexOf (а)' ', как может Ā' содержать себя (в вашем случае)? – MadProgrammer
Что это за 'aktuell'? И вы имеете в виду 'a.indexOf (« A »)'? – Babel
Правильно, должен быть WPL.indexOf (a) – DroidDroid