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?
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.
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