2 svar
84 visningar
TB16 behöver inte mer hjälp
TB16 182 – Fd. Medlem
Postad: 28 nov 2017 18:41

TreeSet och TreeMap

Studera följande kod: 

 

....

if ( ! users.containsKey(userName) )
        users.put(userName, new TreeSet<String>());
for ( String listName : parseCsv(listCsv) ) {
        if ( ! mailingLists.containsKey(listName) )
           mailingLists.put(listName,new TreeSet<String>());
        users.get(userName).add(listName);
        mailingLists.get(listName).add(userName);

....

Mina frågor:

Rad2: Associerar ett nytt TreeSet objekt med användarnamnet (nyckeln)?

Rad3: listCsv är en sträng som innehåller listnamnen till users. Vad jag har förstått så returnerar parseCsv ett fält av kommaseparerade strängar. Innebär detta att varje listnamn får ett minnesutrymme i en array som vi sedan loopar igenom en i taget?

Rad5: Det som jag hänger upp mig på är new TreeSet<String>(). Varför gör vi detta? Vi har redan skrivit följande kod i vår konstruktor:

 

public MailingLists() {

users = new TreeMap<String,Set<String>>();

mailingLists = new TreeMap<String,Set<String>>();

 

Rad6: username är väl en nyckel, och vad vi gör här är väl att vi lägger till ett element (listnamn) i mängden som är kopplad till just det användarnamnet? Dvs kopplar ett värde till nyckeln?  

Rad7: Samma princip som Rad6 fast här är väl listnamnen nycklar som vi ger värden i form av användarnamn?

Stokastisk 3597 – Fd. Medlem
Postad: 28 nov 2017 19:43

Rad2: Japp.

Rad3: Om du menar att den returnerar en array med strängar så är det korrekt att man loopar igenom varje element i den en i taget.

Rad5: I konstruktorn säger du bara vilken typ objekten ska vara av. Jämför med att skriva

Set<String> hejsan;

Denna variabel är inte initialiserad, utan om vi vill initialisera den så behöver vi ju skapa ett objekt, exempelvis

hejsan = new TreeSet<String>();

Så när du lägger in ett objekt i mailingLists så skapar du helt enkelt ett nytt objekt av classen TreeSet<String>.

Rad6: Här efterfrågar du det specifika TreeSet som du har associerat med nyckeln username. I det TreeSet så lägger du in elementet listName.

Rad7: Här är samma princip som på rad 6.

TB16 182 – Fd. Medlem
Postad: 4 dec 2017 22:33
Stokastisk skrev :

Rad2: Japp.

Rad3: Om du menar att den returnerar en array med strängar så är det korrekt att man loopar igenom varje element i den en i taget.

Rad5: I konstruktorn säger du bara vilken typ objekten ska vara av. Jämför med att skriva

Set<String> hejsan;

Denna variabel är inte initialiserad, utan om vi vill initialisera den så behöver vi ju skapa ett objekt, exempelvis

hejsan = new TreeSet<String>();

Så när du lägger in ett objekt i mailingLists så skapar du helt enkelt ett nytt objekt av classen TreeSet<String>.

Rad6: Här efterfrågar du det specifika TreeSet som du har associerat med nyckeln username. I det TreeSet så lägger du in elementet listName.

Rad7: Här är samma princip som på rad 6.

Har behövt fundera en del på denna uppgift, men tror jag hänger med nu. Tack för hjälpen

Svara
Close