Exempel: Räkna antal förekomster

Sven-Olof Nyström
OOP med Java våren -25
Informationsteknologi
Uppsala Universitet

Givet ett antal strängar vill vi räkna hur många gånger varje sträng förekommer. Lösningen är en Map<String, Integer> som associerar varje sträng med antalet gånger den förekommit. Enkelt, eller hur? En komplikation är att strängar som vi inte har sett tidigare inte finns i tabellen, så när vi ser en sträng för första gången måste vi lägga in den i tabellen.

Så vi loopar igenom strängarna i arrayen arg. Tabellen m lagrar antalet förekomster. Vi slår upp antalet förekomster för strängen s med metodanropet m.get(s). Variabeln freq binds till resultatet, som är av klassen Integer. (Vad är skillnaden mellan int och Integer?)

Om strängen inte finns i tabellen returnerar get inte ett objekt, utan värdet null. Om freq är null sätter vi freq till 0 istället.

Sedan uppdaterar vi tabellen med metodanropet m.put(s, freq + 1). Detta ska tolkas: "strängen s har setts freq+1 gånger.

public class Freq {

    public static void main(String args[]) {
        Map<String, Integer> m = new TreeMap<String, Integer>();

        // Initialize frequency table from command line
        for (String s : args) {
            Integer freq =  m.get(s);

	    if (freq == null) {
		freq = 0;
	    }

	    m.put(s, freq + 1);
        }

        System.out.println(m.size() + " distinct words detected:");
        System.out.println(m);
    }
}

Körexempel:

$ java Freq att tänka fritt är stort att tänka rätt är större
7 distinct words detected:
{att=2, fritt=1, rätt=1, stort=1, större=1, tänka=2, är=2}
$

Program: program/collect/Freq.java