Hur importerar man en ArrayList i en ArrayList - Enkel fråga om datavetenskap

Permalänk

Hur importerar man en ArrayList i en ArrayList - Enkel fråga om datavetenskap

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.

Permalänk
Medlem
Skrivet av heretic16:

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); }

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Teknocide:

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); }

Okej. Så jag måste initsalisera en ny item för varje gång? Då blir datatypes ej förstörd?

Attans!!!

Skickades från m.sweclockers.com

Permalänk
Medlem
Skrivet av heretic16:

Okej. Så jag måste initsalisera en ny item för varje gång? Då blir datatypes ej förstörd?

Attans!!!

Skickades från m.sweclockers.com

Vaddå "Attans"?
Datatyper förstörs inte; datatypen är ArrayList<String> oavsett om du tömmer objektet eller inte. Och rent praktiskt instansierar du inte "item", du instansierar en ArrayList<String>.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Skrivet av Teknocide:

Vaddå "Attans"?
Datatyper förstörs inte; datatypen är ArrayList<String> oavsett om du tömmer objektet eller inte. Och rent praktiskt instansierar du inte "item", du instansierar en ArrayList<String>.

Satan då?
Jag löste problemet. Jag hade helt glömt bort att datatyper förstörs inte. Nu har jag löst problemet. Tack!

Permalänk
Medlem
Skrivet av heretic16:

Satan då?
Jag löste problemet. Jag hade helt glömt bort att datatyper förstörs inte. Nu har jag löst problemet. Tack!

Jag undrade mer vad problemet med att skapa nya listor var. Det är trots allt flera listor du vill skapa i "list-listan"

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem
Skrivet av heretic16:

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.

Har lite svårt att greppa frågeställningen men om jag förstår dig rätt så kan du använda metoden clear() för att tömma en lista utan att ta bort den.

itemList.get(index).clear();

Visa signatur

| Ryzen 5800x | Asus prime x470 pro | Asus rtx 3080 tuf oc | Gskill 32gb 3,6ghz | aw3225qf |

Permalänk
Medlem

En liten upplysning:

I kontext av programmering (och speciellt Java) så har begreppen "att importera" och "att implementera" tämligen specifik betydelse, och bör inte användas som synonym för "att lägga till ett objekt i en samling" likt hur du gör.

I Java syftar "importering" på att importera klasser från paker. E.g.

import java.util.ArrayList;

"implementering" är ett bredare begrepp, och kan syfta bl.a. på att skriva en konkret definition till skillnad från en deklaration, eller mer specifikt att implementera ett interface för en klass à la

public class Foo implements ExampleInterface { // Implementation av interface-medlemmar här ... }

Visa signatur

Arbets- / Spelstation: Arch Linux - Ryzen 5 3600 - RX 7900 XT - 32G DDR4
Server: Arch Linux - Core i5-10400F - 16G DDR4