import java.util.LinkedList;

class HajautusTauluK extends HajautusTaulu {
    private LinkedList<String>[] taulu;

    public HajautusTauluK(int avaimia, hajautus haj) {
        if (haj == hajautus.JAKOJ) {
            this.haj = hajautus.JAKOJ;
            this.koko = alukuLahelta(avaimia);
        } else {
            this.haj = haj;
            this.koko = avaimia;
        }
        this.taulu = new LinkedList[this.koko];
        this.a = (int) (Math.random()*Integer.MAX_VALUE);
        this.b = (int) (Math.random()*Integer.MAX_VALUE);
        if (this.a == 0) this.a = 1;
    }

    public void insert(String mjono) {
        int koodi = stringToInt(mjono);
        int paikka = hash(koodi, this.haj);
        if (this.taulu[paikka] == null)
            this.taulu[paikka] = new LinkedList<String>();
        else if (this.taulu[paikka].contains(mjono) )
            return;
        this.taulu[paikka].add(mjono);
    }

    public boolean search(String mjono) {
        int koodi = stringToInt(mjono);
        int paikka = hash(koodi, this.haj);
        if (this.taulu[paikka] == null || !this.taulu[paikka].contains(mjono) )
            return false;
        else return true;
    }

    // Tulostaa taulun statistiikat
    public void stats() {
        int max = 0;
        int sum = 0;
	int ketjuja = 0;
        for (int i = 0; i < this.koko; i++) {
            if (this.taulu[i] != null) {
		ketjuja++;
                int koko = this.taulu[i].size();
                sum += koko;
                if (koko > max) max = koko;
            } 
        }
        System.out.println("Taulun koko = " + this.koko);
        System.out.println("Suurin ylivuotoketju = " + max);
        System.out.println("Ylivuotoketju keskimäärin = " + sum/(1.0*ketjuja));
    }
}