Självklart vet jag hur man importerar en ArrayList till en ArrayList. Men jag lyckas inte som jag vill göra.
Jag har två ArrayListor:
ArrayList<String> item = new ArrayList<String>();
ArrayList<ArrayList<String>> itemList = new ArrayList<ArrayList<String>>();
Så om jag fyller på item med massa värden:
item.add("Hej");
item.add("Då");
item.add("Nej");
item.add("Ja");
Och sedan implementerar jag det in i itemList:
itemList.add(item);
Då har jag placerat en ArrayList i en ArrayList. Problemet är att om jag ska göra detta igen, så måste jag radera item och fylla på den igen. Här kommer problemet: ArrayListor är endast länkar till adresserna. Så raderar jag item så raderar jag ävenitem som finns i itemList.
Fråga:
Finns det inget sätt att radera item utan att itemList ska tappa sitt element?
I så fall måste jag ha flera olika item t.ex.
ArrayList<String> item1 = new ArrayList<String>();
ArrayList<String> item2 = new ArrayList<String>();
ArrayList<String> item3 = new ArrayList<String>();
I detta fall vet jag inte hur många item-listor jag behöver.
Du kan inte radera en ArrayList. Visst, du kan ta bort elementen i den och sätta in nya, men det är fortfarande samma ArrayList. Kan tyckas petigt men det är fundamentalt viktigt att förstå hur det fungerar "under huven"; det är Javas runtime som avgör när en instans (ett objekt som skapats genom "new NågotObjekt(…)") kan raderas ur minnet.
Det vanligaste är att en instans raderas när det inte längre finns kvar några referenser till den. En referens kan hållas i en av dig skapad variabel, som i fallet ArrayList<String> item = new ArrayList<>();, där item rent praktiskt håller värdet av en referens till den nyskapade listan. När du med itemList.add(item); lägger till item i itemList innehåller itemList samma referensvärde som item för stunden håller.
Nu till det intressanta: Om du efter detta allokerar en ny ArrayList till item (alltså item = new ArrayList<String>()), så kommer datan under den förra referensen ligga kvar, orörd, i itemList, medan item nu pekar på ett ny tom lista.
Sammanfattningsvis kan du skapa en praktiskt taget oändlig mängd "item"-listor genom att göra något i stilen
ArrayList<String> item;
ArrayList<ArrayList<String>> itemList = new ArrayList<>();
for (int i=0; i<9000; i++) {
item = new ArrayList<>();
item.add("Item " + i);
itemList.add(item);
}