Samlingar
För den här övningen behöver du ha en textfil att bearbeta. Skriv en, eller saxa från nätet – huvudsaken är att ett flertal av orden förekommer flera gånger. Ett hundratal ord borde räcka.
För att få in filen som standard input till javaprogram används < eller cat (resultatet
av cat ”pipeas” sedan in i programmet).
Från stadard input kan du läsa av orden med klassen java.util.Scanner (använd metoderna
boolean hasNext() och String next()).
När du ska variera vilken implementation av de olika samlingarna du använder kan det vara en bra idé att försöka
använda gränssnittet i så stor utsträckning som möjligt. Detta går överallt utom just i den new-sats
där objektet som representerar samlingen skapas.
Listor
Skapa ett program som läser in orden i textfilen till en lista. Variera vilken sorts lista du använder, huvudsaken
är att de klasser du väljer implementerar gränssnittet List<E>.
Låt programmet skriva ut orden, antingen på var sin rad, eller med mellanslag mellan (eller efter varje ord – du behöver inte bry dig om det extra mellanslag som hamnar sist i utskriften, men om du har lust kan det vara en bra övning att fundera på hur man undviker den).
Modifiera programmet så att det skriver ut orden i omvänd ordning. Finns det något specifik listimplementation
som är särskilt lämpad för detta? Kolla över de olika implementeringarna av gränssnittet List<E>
innan du tänker ut din lösning och sedan implementerar den.
Mängder
En mängd skiljer sig från en lista på det sättet att en mängd bara låter varje element förekomma en gång.
Skapa ett program som läser in orden i textfilen till en mängd. Varier vilken sorts mängd du använder. För
att vara en mängd ska klassen implementera gränssnittet Set<E>. Precis som för listor ska
programmet kunna skriva ut de ord den läste in.
Märker du någon skillnad mellan HashSet och TreeSet?
Listor och Mängder
Lägg ihop de två ovanstående programmen, så att du får ett som skapar både en lista och en mängd med ord. Istället för att skriva ut innehållet i dem ska programmet räkna antalet element i dem. Skriv ut hur stora de båda samlingarna blir.
Associativa samlingar
Skapa ett program som bygger en frekvensordbok över textfilen. Detta gör du genom att skapa en samling som associerar strängar med heltal. När den är färdig kan man använda nycklarna (strängar) till att komma åt värdena (heltalen) – att associera varje ord med en frekvens är precis vad en frekvensordbok gör.
En associativ samling implementerar gränssnittet Map<K,V>.
Använd dina färdigheter från ovanstående uppgifter för att läsa in ett ord i taget. Kontrollera ifall ordet finns i frekvensordboken, om det redan gör det ska frekvensen ökas med ett, om inte ska ordet läggas in och få frekvens 1. Applicera ovanstående på alla ord i texten, och du har byggt din frekvensordbok.
Skriv ut alla ingångar i ordboken exempelvis genom att först skriva ut strängen, sedan en tab ("\t") och
sedan frekvensen. Enklaste sättet att löpa igenom ordboken är att använda metoden keySet()
för att få ut alla nycklar, och löpa igenom dem. Värdet för nyckeln kan då hämtas för varje nyckel.
Prova att använda både TreeMap och HashMap. Blir det någon skillnad på utskriften?
