C11

package PAZ1b.cvicenie09;

import java.util.Arrays;
import java.util.Iterator;
import java.util.LinkedList;

public class NasHashSet {

        // pole listov
        private LinkedList<String>[] poleListov;
        private int size;
        private double a;

        public NasHashSet(int velkost, double a) {
                this.a = a;
                poleListov = new LinkedList[velkost];
                for (int i = 0; i < velkost; i++) {
                        poleListov[i] = new LinkedList<String>();
                }
        }

        private static int zaHashuj(String object, int velkost, double a) {
                int suma = 0;
                // spocitam sumu pre object
                for (int i = 0; i < object.length(); i++) {
                        suma = suma + object.charAt(i);
                }
                // spocitam modulo aby som vratil hodnotu z rozsahu 0 az velkost-1
                return (int) (a * suma) % velkost;
        }

        public boolean add(String slovo) {
                // 1. zahashovat
                int indexKam = zaHashuj(slovo, poleListov.length, a);

                // 2. tak to tam dam

                LinkedList<String> aktualny = poleListov[indexKam];
                if (aktualny.contains(slovo))
                        return false;

                LinkedList<String> listDoktorehoPridavam = poleListov[indexKam];
                listDoktorehoPridavam.add(slovo);
                size++;
                return true;
        }

        @Override
        public String toString() {
                String vypis = "";

                for (int i = 0; i < poleListov.length; i++) {
                        LinkedList<String> aktualny = poleListov[i];
                        for (String prvok : aktualny) {
                                vypis = vypis + prvok + " ";
                        }
                }
                return vypis;
        }

        public void printStructure() {
                String vypis = "";

                for (int i = 0; i < poleListov.length; i++) {
                        LinkedList<String> aktualny = poleListov[i];
                        vypis = vypis + i + ": ";
                        for (String prvok : aktualny) {
                                vypis = vypis + prvok + " ";
                        }
                        vypis = vypis + "\n";
                }
                System.out.println(vypis);
        }

        public boolean contains(String s) {
                int index = zaHashuj(s, poleListov.length, a);
                LinkedList<String> aktualny = poleListov[index];
                return aktualny.contains(s);
        }

        public int getCapacity() {
                return poleListov.length;
        }

        public int size() {
                return size;
        }

        public double getLoadFactor() {
                return (double) size() / getCapacity();
        }

        public static void main(String[] args) {
//              String retazec = "Ahoj";
//              System.out.println(zaHashuj(retazec, 123));

                double a = Math.random();
                NasHashSet mnozina = new NasHashSet(4, a);

                String[] naPridavanie = { "Viktor", "Baska", "Slavka" };

                for (int i = 0; i < naPridavanie.length; i++) {
                        System.out.println(naPridavanie[i] + " " + zaHashuj(naPridavanie[i], mnozina.poleListov.length, a));
                        mnozina.add(naPridavanie[i]);
                }

                System.out.println(mnozina);

                mnozina.printStructure();
                System.out.println(mnozina.getLoadFactor());
        }

}